Employee e1("Bob", 45000.00);
Manager m1("Alex", 60000.00);
e1 = m1; // Huh?
e1 m1
+-----------+ +-----------+
| Emp vptr | | Mgr vptr | <== Not assigned to e1
| name: ...| | name: ...|
| salary:...| <-- | salary:...| <-- Employee part of Manager
+-----------+ +-----------+ (assigned to e1)
| level: ...| <== Not assigned to e1
+-----------+ (e1 has no 'level')
and
Employee *ep1 = new Employee("Bob", 45000.00);
Manager *mp1 = new Manager("Alex", 60000.00);
ep1 = mp1;
ep1 mp1
+---+ +---+ +-----------+
| --|---+ | --|---->| Mgr vptr |
+---+ | +---+ ^ | name: ...|
| | | salary:...|
+----------------+ +-----------+
| level: ...|
+-----------+