// Driver program for employee class hierarchy. #include #include #include #include #include "employee.h" // employee base class #include "salaried.h" // salaried derived class #include "commission.h" // commission derived class #include "base_commission.h" // base_commission derived class #include "hourly.h" // hourly derived class using std::cout; using std::endl; using std::fixed; using std::setprecision; using std::vector; using std::string; int main() { // set floating-point output formatting cout << fixed << setprecision(2); // create vector employees vector employees; // initialize vector with Employees employees.push_back(new salaried("John", "Smith", "111-11-1111", 800.00)); employees.push_back(new commission("Sue", "Jones", "222-22-2222", 10000.00, .06)); employees.push_back(new base_commission("Bob", "Lewis", "333-33-3333", 5000.00, .04, 300.00)); employees.push_back(new hourly("Karen", "Price", "444-44-4444", 16.75, 40)); // generically process each element in vector employees for (size_t i = 0; i < employees.size(); i++) { // Output employee information. employees[i]->print(); // Attempt to downcast pointer. base_commission* p = dynamic_cast(employees[i]); // Test whether vector element points to base salary plus commission worker. if (p != nullptr) { cout << "Old base salary: $" << p->get_salary() << endl; p->set_salary(1.10 * p->get_salary()); cout << "New base salary with 10% increase is: $" << p->get_salary() << endl; } cout << "Earned $" << employees[i]->earnings() << endl << endl; } // Release memory held by vector employees for (size_t i = 0; i < employees.size(); i++) { delete employees[i]; } return 0; }