// an example of multiple inheritance #include #include using namespace std; class Person { private: string _name; public: Person(string n) : _name(n) { } virtual string name() const { return _name; } }; // name always starts with Student class Student : public Person { private: string _major; public: Student(string name, string major) : Person("Student " + name), _major(major) { } virtual string major() const { return _major; } }; class Worker : public Person { private: int _centsPerHour; string _department; public: Worker(string name, int payRate, string dept) : Person("Worker " + name), _centsPerHour(payRate), _department(dept) { } int payInCents(int hrs) const { if ( hrs <= 40 ) return _centsPerHour * hrs; else return _centsPerHour * 40 + (_centsPerHour * (hrs - 40) * 3) / 2; } virtual string department() const { return _department; } }; // can only work in department that is the same as major for minimum wage class StudentWorker : public Worker, public Student { public: StudentWorker(string name, string major) : Student(name, major), Worker(name, 725, major) { } }; int main() { Worker *jane = new Worker("Jane", 1535, "road construction"); Student *anna = new Student("Anna", "human resources"); StudentWorker *tom = new StudentWorker("Tom", "avionics"); Worker *people_who_get_paid[2] = {jane, tom}; for(Worker* w : people_who_get_paid) { cout << "When " << w->name() << " works 20 hours, they get " << w->payInCents(20) << " cents from " << w->department() << endl; } cout << anna->name() << " is majoring in " << anna->major() << endl; return 0; }