Syntaxe:
class Sample
{
public:
int Sam_x;
int Sam_y;
Sample(): Sam_x(1), Sam_y(2) /* Classname: Initialization List */
{
// Constructor body
}
};
Liste des besoins d'initialisation:
class Sample
{
public:
int Sam_x;
int Sam_y;
Sample() */* Object and variables are created - i.e.:declaration of variables */*
{ // Constructor body starts
Sam_x = 1; */* Defining a value to the variable */*
Sam_y = 2;
} // Constructor body ends
};
dans le programme ci-dessus, lorsque le constructeur de la classe est exécuté, Sam_x et Sam_y sont créés. Ensuite, dans le corps du constructeur, ces variables de données de membre sont définies.
Cas d'utilisation:
- Const et variables de référence dans une classe
En C, les variables doivent être définies lors de la création. de la même manière en C ++, nous devons initialiser la variable Const et Reference lors de la création d'objet en utilisant la liste Initialisation. si nous faisons l'initialisation après la création de l'objet (à l'intérieur du corps du constructeur), nous obtiendrons une erreur de temps de compilation.
Objets membres de la classe Sample1 (base) qui n'ont pas de constructeur par défaut
class Sample1
{
int i;
public:
Sample1 (int temp)
{
i = temp;
}
};
// Class Sample2 contains object of Sample1
class Sample2
{
Sample1 a;
public:
Sample2 (int x): a(x) /* Initializer list must be used */
{
}
};
Lors de la création d'un objet pour une classe dérivée qui appelle en interne le constructeur de classe dérivée et appelle le constructeur de classe de base (par défaut). si la classe de base n'a pas de constructeur par défaut, l'utilisateur obtiendra une erreur de temps de compilation. Pour éviter, il faut avoir soit
1. Default constructor of Sample1 class
2. Initialization list in Sample2 class which will call the parametric constructor of Sample1 class (as per above program)
Le nom du paramètre du constructeur de classe et le membre de données d'une classe sont identiques:
class Sample3 {
int i; /* Member variable name : i */
public:
Sample3 (int i) /* Local variable name : i */
{
i = i;
print(i); /* Local variable: Prints the correct value which we passed in constructor */
}
int getI() const
{
print(i); /*global variable: Garbage value is assigned to i. the expected value should be which we passed in constructor*/
return i;
}
};
Comme nous le savons tous, variable locale ayant la plus haute priorité puis variable globale si les deux variables ont le même nom. Dans ce cas, le programme considère la valeur «i» {variable à la fois à gauche et à droite. ie: i = i} en tant que variable locale dans le constructeur Sample3 () et la variable membre de classe (i) a été remplacée. Pour éviter, il faut utiliser soit
1. Initialization list
2. this operator.