Sintassi:
class Sample
{
public:
int Sam_x;
int Sam_y;
Sample(): Sam_x(1), Sam_y(2) /* Classname: Initialization List */
{
// Constructor body
}
};
Necessità dell'elenco di inizializzazione:
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
};
nel programma sopra, Quando viene eseguito il costruttore della classe, vengono creati Sam_x e Sam_y . Quindi, nel corpo del costruttore, vengono definite quelle variabili dei dati dei membri.
Casi d'uso:
- Variabili costanti e di riferimento in una classe
In C, le variabili devono essere definite durante la creazione. allo stesso modo in C ++, dobbiamo inizializzare la variabile Const e Reference durante la creazione dell'oggetto usando l'elenco Inizializzazione. se eseguiamo l'inizializzazione dopo la creazione di un oggetto (all'interno del corpo del costruttore), avremo un errore di tempo di compilazione.
Oggetti membri della classe Sample1 (base) che non hanno un costruttore predefinito
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 */
{
}
};
Durante la creazione di oggetti per la classe derivata che chiamerà internamente il costruttore della classe derivata e chiamerà il costruttore della classe base (impostazione predefinita). se la classe base non ha un costruttore predefinito, l'utente riceverà un errore di tempo di compilazione. Per evitare, dobbiamo avere entrambi
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)
Il nome del parametro del costruttore della classe e il membro Data di una classe sono gli stessi:
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;
}
};
Come tutti sappiamo, la variabile locale ha la massima priorità rispetto alla variabile globale se entrambe le variabili hanno lo stesso nome. In questo caso, il programma considera il valore "i" {variabile sia sinistra che destra. vale a dire: i = i} come variabile locale nel costruttore Sample3 () e la variabile membro della classe (i) ha avuto la precedenza. Per evitare, dobbiamo usare entrambi
1. Initialization list
2. this operator.