Difference between revisions of "Cpp Coding Standards/VIRTUAL"
m (formatting) |
(removed duplication among LSP and Over) |
||
Line 9: | Line 9: | ||
===== Overrides <span id="Over">(Over)</span> ===== | ===== Overrides <span id="Over">(Over)</span> ===== | ||
− | + | Give all overrides of a virtual function the same default values.<br> | |
− | + | ||
Use the “virtual” keyword also on all overrides. [[/Over|-> Details]] | Use the “virtual” keyword also on all overrides. [[/Over|-> Details]] | ||
Revision as of 11:28, 13 April 2007
Contents
Virtual Classes (VIRTUAL) - Summary
These items refer to class hierarchies where the base class is virtual and the derived classes are intended to be used – at least sometimes – via pointers or references to the base class.
Liskov Substitution Principle (LSP)
Always follow the Liskov Substitution Principle: Everything a client can do with a base class, it must be able to do with each derived class as well. -> Details
Instantiate Only Leaves (Inst)
In an inheritance tree of virtual classes, instantiate only the leaves. Make all other classes either abstract or their constructors protected, so instantiation is impossible. -> Details
Overrides (Over)
Give all overrides of a virtual function the same default values.
Use the “virtual” keyword also on all overrides. -> Details
Right Destructor (RightDestr)
All virtual classes need a virtual destructor. If the class can not be instantiated, the destructor may be inline, else it has to be non-inline.
Non-virtual mix-in classes need a protected destructor. -> Details
Non Virtual Interfaces (NVI)
If a class has more than one parallel derived class, use the Non Virtual Interface idiom. -> Details
Safe Copying (SafeCopy)
If a virtual class needs to be copied via references to a base class, disable the copy constructor and operator=() in the base classes and implement the clone() idiom instead. -> Details
Related Rules
- CLSDESIGN:Inherit - How to Inherit