- Coupling: Always minimize coupling. If a class relationship can be expressed in more than one way, use the weakest relationship.
- Inheritance relationship: Inheritance is the one of strongest relationships. Use it when there is no equivalent weaker alternative.
- Make base class destructors virtual (unless you are certain that no one will ever attempt to delete a derived object through a pointer to base).
- When providing a function with the same name as an inherited function, be sure to bring the inherited functions into scope with a using-declaration if you don't want to hide them.