Sintassi:
class Sample
{
public:
int Sam_x;
int Sam_y;
Sample(): Sam_x(1), Sam_y(2) /* Classname: Initialization List */
{
// Constructor body
}
};
Necessità di lista 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 di cui sopra, quando viene eseguito il costruttore della classe, Sam_x e Sam_y sono creati. Quindi nel corpo del costruttore, vengono definite le variabili dei dati membro.
I casi d'uso:
- Const e di riferimento variabili in una classe
In C, le variabili devono essere definiti durante la creazione. allo stesso modo in C++, dobbiamo inizializzare la variabile Const e Reference durante la creazione dell'oggetto usando l'elenco di inizializzazione. se eseguiamo l'inizializzazione dopo la creazione dell'oggetto (nel corpo del costruttore interno), otterremo l'errore del tempo di compilazione.
oggetti membro di Sample1 (di base) di classe che non hanno costruttore di default
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 */
{
}
};
Mentre la creazione di oggetti per la classe derivata che internamente chiamate classe derivata costruttore e chiama costruttore della classe base (predefinito). se la classe base non ha un costruttore predefinito, l'utente riceverà un errore in fase di compilazione.Per evitare, dobbiamo avere uno
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)
- nome del parametro e dati utente
Classe di costruttore 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 sapere, la variabile locale ha la massima priorità della variabile globale se entrambe le variabili hanno lo stesso nome. In questo caso, il programma considera il valore "i" {variabile sia destra che sinistra. cioè: i = i} come variabile locale nel costruttore Sample3() e la variabile membro della classe (i) ha precedenza. Per evitare, dobbiamo utilizzare sia
1. Initialization list
2. this operator.
fonte
2017-07-28 12:39:24
membri della classe che sono le classi possono essere POD, troppo –
un must anche per importante caso di un riferimento – 4pie0
Perché non usare "una (3);" o "a = A (3);" nel corpo del costruttore predefinito di B? – Sergey