| Use public derivation only. |
| Write a 'virtual' destructor for base classes. |
| Avoid downcasting base class object pointers to derived class. |
| Avoid casting to a virtual base class as this is irreversible. |
| Override all overloads of a base class virtual function. |
| If a virtual function in a base class is not overridden in any derived class then make it non virtual. |
| Only define virtual functions in a base class if the behaviour will always be valid default behaviour for derived classes. |
| Declare a function pure virtual in the base class if each derived class has to provide specific behaviour. |
| If a virtual function is overridden in each derived class with the same implementation then make it a non virtual function in the base class. |
| Ensure that the return type of the virtual function being overridden is compatible. |
| Do not overload or hide inherited non-virtual functions. |
| When redeclaring and overriding functions use the same default parameter values as in other declarations. |
| Do not invoke virtual methods of the declared class in a constructor or destructor. |
| Declare the copy assignment operator protected in an abstract class. |
| Ensure base classes common to more than one derived class are virtual. |
| Explicitly declare polymorphic member functions virtual in a derived class. |