next up previous contents
Next: De la classe dérivée Up: Héritage simple Previous: Portée et héritage

Constructions des objets dérivés

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:

  1. création de la partie B de A (avec appel du constructeur par défaut de b
  2. création des données membres propres à A (avec appel des constructeurs par défaut) dans l'ordre d'apparition de ces données membres dans la définition.

On peut aussi appeler un constructeur particulier de la classe de base gif 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 :
  1. création de la partie base : appel de base::base() constructeur par défaut de base
  2. création du reste (donnée membre int a)
  3. exécution du corps du constructeur derivee()

Une déclaration derivee b=1 provoquera:

  1. création de la partie int a de derivee avec initialisation à 1
  2. création de la partie base : appel de base::base(1)
  3. exécution du corps du constructeur derivee(int)



Mon Oct 20 14:02:48 MET 1997