next up previous contents
Next: Initialisation de membres Up: Initialisation et constructeurs Previous: Initialisation et constructeurs

Création des objets données membres

L'appel d'une fonction membre suppose que l'objet existe au moment de l'appel, et donc que toutes les données membres aient été créées; cette règle s'applique aussi aux constructeurs. Cela signifie qu'à l'intérieur du corps du constructeur (après '{'), toutes les données membres ont déjà été créées.

Pour créer un objet d'un type quelconque, le compilateur procédera récursivement ainsi:

  1. pour les types de bases : allocation de l'espace nécessaire et initialisation à 0 pour les objets globaux, pas d'initialisation sinon
  2. pour les autres types :
  3. s'il existe un constructeur défini, appel de ce constructeur

class A{
  public:
    A(){
    //...
    }
    A(int i){
    a1=a2=i;
    }
  private:
    int a1;
    int a2;
 };
 //...
 A x;
Une déclaration A x; va d'abord créer un objet de type A pour cela le compilateur va faire les allocations pour a1 et a2, ensuite il appellera le constructeur membre par défaut A::A(). D'une manière générale, une fois dans le corps d'une fonction membre et en particulier d'un constructeur, l'objet doit déjà avoir été créé.
class B{
  public:B(){
    //...
    }
  private:
    int b;
    A ba;
};
//...
B y;

De la même façon, B y; va créer un objet de la classe B, et pour cela allouer ce qu'il faut pour b, et créer une donnée membre ba de la classe A, ce qui se fera comme indiqué juste au-dessus ; on aura donc d'abord un appel de A::A() puis de B::A().




Mon Oct 20 14:02:48 MET 1997