previous | start | next

1.2.1a What does "derived type is a kind of base type" mean?

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: ...|
                                +-----------+


previous | start | next