Inheritance allows classes to inherit characteristics from other classes. There are three types of inheritance: public, protected, and private. Public inheritance makes base class members public or protected in the derived class. Protected inheritance makes base class members protected in the derived class. Private inheritance makes base class members private in the derived class. Polymorphism allows functions to have different implementations depending on the type of object that calls it. Virtual functions provide polymorphism by allowing derived classes to override base class function implementations through late binding.