// File: Application.cpp // Driver for Employee hierarchy #include #include "Employee.h" #include "Boss1.h" #include "Commis1.h" #include "Piece1.h" #include "Hourly1.h" using namespace std; void virtualViaPointer( const Employee * ); void virtualViaReference( const Employee & ); int main() { // set output formatting cout << setiosflags( ios::fixed | ios::showpoint ) << setprecision( 2 ); Boss b( "John", "Smith", 800.00 ); b.print(cout); // static binding cout.flush(); cout << " earned $" << b.earnings(); // static binding cout.flush(); virtualViaPointer( &b ); // uses dynamic binding virtualViaReference( b ); // uses dynamic binding CommissionWorker c( "Sue", "Jones", 200.0, 3.0, 150 ); c.print(cout); // static binding cout << " earned $" << c.earnings(); // static binding cout.flush(); virtualViaPointer( &c ); // uses dynamic binding virtualViaReference( c ); // uses dynamic binding PieceWorker p( "Bob", "Lewis", 2.5, 200 ); p.print(cout); // static binding cout << " earned $" << p.earnings(); // static binding cout.flush(); virtualViaPointer( &p ); // uses dynamic binding virtualViaReference( p ); // uses dynamic binding HourlyWorker h( "Karen", "Price", 13.75, 40 ); h.print(cout); // static binding cout << " earned $" << h.earnings(); // static binding cout.flush(); virtualViaPointer( &h ); // uses dynamic binding virtualViaReference( h ); // uses dynamic binding cout << endl; return 0; } // Make virtual function calls off a base-class pointer // using dynamic binding. void virtualViaPointer( const Employee *baseClassPtr ) { baseClassPtr->print(cout); cout << " earned $" << baseClassPtr->earnings(); cout.flush(); } // Make virtual function calls off a base-class reference // using dynamic binding. void virtualViaReference( const Employee &baseClassRef ) { baseClassRef.print(cout); cout << " earned $" << baseClassRef.earnings(); cout.flush(); }