Contenido del Curso
POO en C++
POO en C++
Lista de Inicialización del Constructor
Una lista de inicialización permite que los constructores inicialicen los miembros de la clase antes de que se ejecute el cuerpo del constructor. Es especialmente útil para inicializaciones complejas o al trabajar con objetos de clases que tienen miembros const
.
Sintaxis de la lista de inicialización
La sintaxis de las listas de inicialización puede parecer excesivamente compleja y confusa. Se podría considerar utilizar solo un constructor como una alternativa más simple. Sin embargo, a medida que el programa crece, las listas de inicialización resultan ser convenientes y sencillas de utilizar.
:
(símbolo de dos puntos): introduce la lista de inicialización de miembros en un constructor;miembro (valor): una variable miembro de la clase que se inicializa con el valor (argumento pasado al constructor);
{ }
(llaves): el cuerpo del constructor, donde se puede ejecutar código adicional después de la inicialización de los miembros.
temperature_sensor.h
class TemperatureSensor { public: TemperatureSensor(int initialTemperature) : currentTemperature(initialTemperature) {} int currentTemperature; };
Limitaciones y consideraciones
Existe una idea errónea común sobre el orden de inicialización en la lista de inicialización. Contrario a la creencia popular, la inicialización de variables en la lista de inicialización no sigue el orden en que están escritas. En su lugar, está determinada por el orden de declaración de los miembros en la clase, no por la secuencia en la lista de inicialización.
main.cpp
#include <iostream> class Exchanger { public: Exchanger(float _quantity, float _rate) : quantity(_quantity), rate(_rate), total(quantity * rate) {} float quantity, rate, total; }; int main() { Exchanger exchanger(100, 0.3); std::cout << exchanger.total; }
Intenta modificar la secuencia de inicialización de la variable total
en la lista de inicialización y en la declaración de variables dentro de la class
.
Cuando se utilizan listas de inicialización en un constructor, el nombre del argumento puede ser el mismo que el nombre del atributo de la class
.
main.cpp
#include <iostream> class Exchanger { public: Exchanger(float quantity, float rate) : quantity(quantity), rate(rate), total(quantity * rate) {} float quantity, rate, total; }; int main() { Exchanger exchanger(100, 0.3); std::cout << exchanger.total; }
Pero si usas el mismo nombre tanto para las variables miembro como para los argumentos, el total tomará el valor de los argumentos multiplicados, no de los miembros. Para ver esto, intenta establecer quantity en cero en lugar del argumento.
1. ¿Qué es una lista de inicialización de constructor?
2. ¿Qué símbolo introduce la lista de inicialización de miembros en un constructor?
¡Gracias por tus comentarios!