Derived classes are the base of object-oriented design. They allow you to define a base class and extend it in a way that still allows you to use it as the base class. One of the key points is that when you pass a derived class to a function that uses a base class as a parameter the derived class is treated as if it were a base class.