...
Code Block | ||
---|---|---|
| ||
class Employee { public: Employee(string theName) : name(theName) {}; string getName() const {return name;} virtual void print() const { cout << "Employee: " << getName() << endl; } private: string name; }; class Manager : public Employee { public: Manager(string theName, Employee theEmployee) : Employee(theName), assistant(theEmployee) {}; Employee getAssistant() const {return assistant;} virtual void print() const { cout << "Manager: " << getName() << endl; cout << "Assistant: " << assistant.getName() << endl; } private: Employee assistant; }; int main () { Employee coder("Joe Smith"); Employee typist("Bill Jones"); Manager designer("Jane Doe", typist); coder = designer; // slices Jane Doe! coder.print(); } |
In this code, class Manager
is derived from class Employee
and adds additional information, namely the data member assistant
. In main
, the object designer
of class Manager
, which contains an assistant
data member typist
, is copied by value to the object coder
of class Employee
. This results in the designer
object being sliced, and only the Employee
information is copied. Hence, the print()
statement results in the output:
...