next up previous contents
Next: Création : quand? Up: Initialisation et constructeurs Previous: Création des objets données

Initialisation de membres

Que les données membres soient créées avant l'appel au constructeur peut être un inconvénient. Par exemple, on peut vouloir une initialisation spécifique de telle ou telle donnée membre.

On peut passer des arguments aux membres à initialiser par l'intermédiaire de liste d'initialisation de membres.

class C{
public:
  C();
  C(int n,int m):ac2(n),ac1(m){i=0;}
private:
  B bc;
  A ac1;
  A ac2;
  int i;
}
Dans ce cas, C c(2,3) provoquera (dans cet ordre).
  1. initialisation de bc :
    1. A::A() initialisation de ba
    2. B::B() initialisation de bc
  2. initialisation de ac1 :
    1. A::A(m) initialisation de ac1
  3. initialisation de ac2 :
    1. A::A(n) initialisation de ac2 :

On peut remarquer que le mécanisme des listes d'utilisation de membres est le seul moyen de manipuler des constantes:
class X{
  const int a;
public:
  X(){a=0;}             //non!! 
  X(int i):a(i){};      //ok
};

Le compilateur appellera les divers constructeurs des données membres (dans l'ordre de leur apparition dans la définition de la classe).




Mon Oct 20 14:02:48 MET 1997