Difference between revisions of "Cpp Coding Standards/VIRTUAL"

From Apache OpenOffice Wiki
Jump to: navigation, search
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
Topic-Id: '''VIRTUAL'''
+
== Virtual Classes (VIRTUAL) ==
 +
''Virtual classes are classes with (at least one) virtual functions.''
  
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 <span id="LSP">(LSP)</span> =====
----
+
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. [[/LSP|-> Details]]
=== Summary ===
+
==== Liskov Substitution Principle <span id="LSP">(LSP)</span> ====
+
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.  
+
 
+
[[/LSP|Details]]
+
 
+
==== Instantiate Only Leaves <span id="Inst">(Inst)</span> ====
+
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.
+
 
+
[[/Inst|Details]]
+
 
+
==== Overrides <span id="Over">(Over)</span> ====
+
Do not give overrides of a virtual function stronger preconditions or weaker postconditions.
+
 
+
Give them the same default values.
+
 
+
Use the “virtual” keyword also on all overrides.
+
 
+
[[/Over|Details]]
+
 
+
==== Right Destructor <span id="RightDestr">(RightDestr)</span> ====
+
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.
+
 
+
[[/RightDestr|Details]]
+
  
==== Non Virtual Interfaces <span id="NVI">(NVI)</span> ====
+
===== Instantiate Only Leaves <span id="Inst">(Inst)</span> =====
If a class has more than one parallel derived class, use the Non Virtual Interface idiom.
+
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. [[/Inst|-> Details]]
  
[[/NVI|Details]]
+
===== Non Virtual Interface <span id="NVI">(NVI)</span> =====
 +
If a class has more than one parallel derived class, use the Non Virtual Interface idiom. [[/NVI|-> Details]]
  
==== Safe Copying <span id="SafeCopy">(SafeCopy)</span> ====
+
===== Overrides <span id="Over">(Over)</span> =====
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.
+
Give all overrides of a virtual function the same default values.<br>
 +
Use the “virtual” keyword also on all overrides. [[/Over|-> Details]]
  
[[/SafeCopy|Details]]
+
===== Right Destructor <span id="RightDestr">(RightDestr)</span> =====
 +
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. <br>
 +
Non-virtual mix-in classes need a protected destructor. [[/RightDestr|-> Details]]
  
 +
===== Safe Copying <span id="SafeCopy">(SafeCopy)</span> =====
 +
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. [[/SafeCopy|-> Details]]
 
----
 
----
=== Related Rules ===
+
==== Related Rules ====
* [[../Class Design#Inherit |CLSDESIGN:Inherit]] - How to Inherit
+
'''How to Inherit''' [[../Class Design#Inherit|-> CLSDESIGN:Inherit]]
  
 
----
 
----
 
[[Category:Coding Standards]]
 
[[Category:Coding Standards]]

Latest revision as of 09:34, 23 May 2007

Virtual Classes (VIRTUAL)

Virtual classes are classes with (at least one) virtual functions.

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

Non Virtual Interface (NVI)

If a class has more than one parallel derived class, use the Non Virtual Interface idiom. -> 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

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

How to Inherit -> CLSDESIGN:Inherit


Personal tools