Virtual functions allow objects of derived classes to be referenced by pointers or references to the base class. This allows polymorphic behavior where calling code does not need to know the exact derived class, but the correct overridden function for that derived class will be called at runtime. Some key points:
- Virtual functions provide runtime polymorphism in C++. The correct function to call is determined by the actual object type, not the reference/pointer type.
- Pure virtual functions are declared in a base class but provide no definition - derived classes must override these to be instantiable.
- Constructors cannot be virtual but destructors can, and it is important to make base class destructors virtual to ensure proper cleanup