Sintaxis:
class Sample
{
public:
int Sam_x;
int Sam_y;
Sample(): Sam_x(1), Sam_y(2) /* Classname: Initialization List */
{
// Constructor body
}
};
Necesidad de la lista de inicialización:
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
};
en el programa anterior, Cuando se ejecuta el constructor de la clase, Sam_x y Sam_y se crean. Luego, en el cuerpo del constructor, se definen las variables de datos de los miembros.
Los casos de uso:
- Const y de referencia variables en una Clase
En C, las variables deben ser definidos durante la creación. de la misma manera en C++, debemos inicializar la variable Const y Reference durante la creación del objeto usando la lista de Inicialización. si hacemos la inicialización después de la creación del objeto (cuerpo constructor interno), obtendremos un error de tiempo de compilación.
objetos miembro de Sample1 (bases) de clase que no tiene constructor por defecto
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 */
{
}
};
al crear el objeto de clase derivada que internamente llamadas clase derivada constructor y convoca al constructor de la clase base (predeterminado). si la clase base no tiene un constructor predeterminado, el usuario obtendrá un error de tiempo de compilación.Para evitar, debemos tener bien
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)
- nombre del parámetro y datos de los miembros
del constructor de la clase de una clase son iguales:
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;
}
};
Como todos saber, la variable local tiene la prioridad más alta que la variable global si ambas variables tienen el mismo nombre. En este caso, el programa considera el valor "i" {variable izquierda y derecha. es decir: i = i} como variable local en el constructor Sample3() y la variable miembro de la clase (i) tiene anulación. Para evitar, debemos utilizar cualquiera
1. Initialization list
2. this operator.
miembros de la clase, es decir clases puede ser POD, también –
una necesidad también para el caso de una referencia importante – 4pie0
Por qué no usar "a (3);" o "a = A (3);" en el cuerpo del constructor por defecto de B? – Sergey