class Employee : public Person // Inheritance { private: Record myRecord; // Composition Project* myProject = nullptr; // Aggregation int id; public: Employee(string name, double s, int i) : Person(name), myRecord(s), id(i) {} friend ostream& operator<<(ostream& out, Employee& me) { out << (Person &)me << endl; // (a) out << me.myRecord << endl; // (b) if (me.myProject != nullptr) out << *me.myProject << endl; // (c) out << me.id << endl; // (d) return out; } };
The Person, Project, and Record member variables are private
, so they cannot be accessed directly from the Employee class. The Employee class must use the public interfaces (i.e., the public member functions) of the superclass and the two-part classes to access their private
members. The exact formatting (e.g., spaces and new lines) is not logically significant.
out << (Person &)me
matches the Person inserter function parameter list.