Inheritance Hierarchies
Because derived classes inherit the members of the base
classes, one class' design can be based on existing
members from another class.
Think of this as using building blocks.
Instead of starting from scratch with each class that we
design, we can extend one class from another, reusing an
existing class and reducing the need to reinvent.
New member functions can be added without modifying
the base class itself.  And, a derived class can change the
inherited base class client interface by specifying data
members and member functions of the same name, hiding
those inherited from the direct or indirect base classes.