A pure virtual function has no implementation in the base class. You declare it with = 0 after the signature: virtual void speak() = 0;. Any class with at least one pure virtual function becomes abstract.
You can't create objects of an abstract class. Derived classes must override all pure virtual functions to become concrete. Use pure virtual functions to define an interface. The base class says "you must implement this," but doesn't provide a default.