#include using namespace std ; //Virtual Destructor class Person { public: string firstName ; string lastName ; //virtual void getName() { cout << firstName << " " << lastName << endl ; } Person() { cout << "Person Constructor." << endl ; } //virtual ~Person() { cout << "Person Destructor." << endl ; } }; class Employee : public Person { public: string jobTitle ; virtual void getName() { cout << firstName << " " << lastName << " " << jobTitle << endl ; } Employee() { cout << "Employee Constructor." << endl ; } //virtual ~Employee() { cout << "Employee Destructor." << endl ; } }; class Manager : public Employee { public: //What if the method is missing //Climb up the hierarchy virtual void getName() { cout << firstName << " " << lastName << " " << jobTitle << " Manager" << endl ; } Manager() { cout << "Manager Constructor." << endl ; } //virtual ~Manager() { cout << "Manager Destructor." << endl ; } }; int main() { Person* p1 ; Employee* e1 ; Manager* m1 ; e1 = new Employee() ; e1->firstName = "Chuck" ; e1->lastName = "Wepner" ; e1->jobTitle = "Boxer" ; p1 = e1 ; //p1->getName() ; delete p1 ; cout << endl << endl << endl ; m1 = new Manager() ; m1->firstName = "Chuck" ; m1->lastName = "Wepner" ; m1->jobTitle = "Boxer" ; p1 = m1 ; //e1->getName() ; //Make sure we delete the right type //or program will crash delete p1 ; return 0 ; }