Sintaxis:
class Sample
{
public:
int Sam_x;
int Sam_y;
Sample(): Sam_x(1), Sam_y(2) /* Classname: Initialization List */
{
// Constructor body
}
};
Lista de necesidades 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 . Luego, en el cuerpo del constructor, se definen las variables de datos de miembros.
Casos de uso:
- Const y variables de referencia en una clase
En C, las variables deben definirse durante la creación. de la misma manera en C ++, debemos inicializar la variable Const y Reference durante la creación de objetos mediante la lista de Inicialización. Si hacemos la inicialización después de la creación del objeto (dentro del cuerpo del constructor), obtendremos un error de tiempo de compilación.
Objetos miembros de la clase Sample1 (base) que no tienen un constructor predeterminado
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 un objeto para la clase derivada que internamente llama al constructor de la clase derivada y llama 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
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)
El nombre del parámetro del constructor de la clase y el miembro de datos de una clase son los mismos:
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 sabemos, la variable local tiene la más alta prioridad que la variable global si ambas variables tienen el mismo nombre. En este caso, el programa considera el valor "i" {variable del lado izquierdo y derecho. es decir: i = i} como variable local en el constructor Sample3 () y la variable miembro de clase (i) se anuló. Para evitar, debemos usar cualquiera
1. Initialization list
2. this operator.