Make abstract base class constructors protected to ensure that only a derived class can call the constructor, and so that clients can't try to create an object of that class.
NOTE
Although you can make destructors private or protected to prevent stack allocation, do not make abstract base class destructors private or protected unless you don't want clients to delete an object given a pointer to a base class. This isn't usually the case. See "Control class access" on page 107 for
more information.
Use pure virtual functions in your abstract class for those functions that must be overridden by derived classes. For example, before you can create a concrete class (one that can be instantiated), you must override this pure virtual function:
class TAbstract { public: virtual void MustOverride() = 0; };
NOTE An abstract base class can itself be derived from another class, which might or might not be abstract itself.