Virtual functions allow functions to be overridden in derived classes. They are useful for runtime polymorphism. A pure virtual function is a virtual function in a base class that has no definition, serving as a placeholder that must be overridden in derived classes. Derived classes that override all pure virtual functions from their base classes can have objects instantiated.