Comme un objet d'une classe dérivée est un objet de la classe de base plus quelque chose, pour construire un objet de la classe dérivée il faut au préalable construire la partie de l'objet correspondant à la classe de base.
Les constructeurs ne peuvent
s'hériter. A priori si derivee
est une classe dérivée de base
,
un constructeur
de base ne peut construire que ce qui concerne la partie base
de cet
objet et donc un héritage de constructeur réaliserait une construction
incomplète d'un objet de de derivee.
En résumé (et ces règles s'appliquent récursivement), pour construire un objet d'une classe A dérivant (immédiatement) de B:
On peut aussi appeler un constructeur particulier de la
classe de base ou un constructeur constructeur pour les données
membres par
le mécanisme des listes d'initialisation de membres.
Exemple:
class base{ //... public: base(int); base(); }; class derivee: public base{ int a; public : derive(int i): a(i),base(i){ /*...*/}; derive(){/*...*/}; };Une déclaration
derivee a;
provoquera dans l'ordre :
Une déclaration derivee b=1
provoquera: