Given outdated code, the system has the following class hierarchy:
Base
^
|
----------+---------------
^ ^ ^ ^ ^
| | | | |
A1 B1 C1 D1 E1
^ ^ ^ ^ ^
| | | | |
A2 B2 C2 D2 E2
.......
^ ^ ^ ^ ^
| | | | |
An Bn Cn Dn En
A hierarchy represents messages in a specific domain.
The base class is, of course, the base class of all messages. A1..E1 - messages related to version 1 of the domain, A2..E2 to version 2, etc. Note that An must inherit directly from An-1, since A overrides certain An-1 methods.
There are some functions common to all messages, so it is defined as Base :: PerformFunctionality. Some of the functionality is specific only to version n, so there is a virtual function Base :: SpecificPartOfFunctionality, which is called by the base :: PerformFunctionality.
, , Base:: SpecificPartOfFunctionality An..En.
2 , :
Base:: SpecificPartOfFunctionality An..En.
, , .
, Fn, SpecificPartOfFunctionality.
BaseN, Base, An..En BaseN:
class BaseN : public Base {
SpecificPartOfFunctionality() { ...}
};
class An: public An-1, public BaseN { .. }
, .
, , - m Base:: SpecificPartOfFunctionality. BaseM, Base:: SpecificPartOfFunctionality. , SpecificPartOfFunctionality An - of BaseN BaseN. .
?