Lista de inicialización de constructores en C++: Por qué y cómo usarla
Al instanciar objetos, los constructores a menudo manejan la inicialización de variables miembro. Para tales miembros, una lista de inicialización para constructores proporciona una forma abreviada y eficiente de su inicialización antes de que se ejecute el cuerpo del constructor. Aparte del rendimiento, a veces también es obligatorio debido a variables const o miembros de una clase base.
¿Qué es una lista de inicialización de constructor?
Una lista de inicialización de constructor es un procedimiento para inicializar variables miembro directamente, por lo tanto, no hay un constructor por defecto que se copie y luego se asigne.
Sintaxis
La siguiente sintaxis de inicialización de lista de constructor es la siguiente:
ClassName(type1 param1, type2 param2) : member1(param1), member2(param2) { // Constructor body } Aquí, member1 y member2 se inicializan con param1 y param2 antes de que se ejecute el cuerpo del constructor.
Ejemplo de lista de inicialización de constructor
Aquí hay un ejemplo simple que demuestra cómo usar una lista de inicialización.
#include <iostream> #include <string> class Student { public: Student(const std::string& name, int age) : name(name), age(age) {} void display() const { std::cout << "Name: " << name << ", Age: " << age << "\n"; } private: std::string name; int age; }; int main() { Student s("Navya", 20); s.display(); return 0; } Salida
Name: Navya, Age: 20
¿Por qué usar listas de inicialización de constructores?
- Para evitar inicialización por defecto seguida de reasignación, ahorrando tiempo y recursos.
- Es obligatorio para ciertos tipos de variables const, miembros de referencia y miembros de clase base.
- Mantiene toda la lógica de inicialización en un lugar, separada del cuerpo del constructor.
Casos especiales
En lo siguiente, discutiremos algunos casos especiales para la lista de inicialización de constructor:
Miembros Const o de Referencia
Las variables const y los miembros de referencia no pueden reasignarse, por lo que deben inicializarse en una lista de inicialización,
class Config { public: Config(const std::string& product, const int & model) : product (product), model(model) {} private: const std::string product; const int & model; }; Inicialización de clase base
Cuando una clase derivada hereda de una clase base, puede usar una lista de inicialización para llamar al constructor de la clase base,
class Base { public: Base(int value) : baseValue(value) {} protected: int baseValue; }; class Derived : public Base { public: Derived(int value, int extra) : Base(value), extraValue(extra) {} private: int extraValue; };
Lenguaje C
- Dominando Queues en C#: Enqueue, Dequeue y Operaciones Primero-En-Entrar-Primero-En-Salir Explicadas
- Dominando structs en C: Paso, retorno y manejo por referencia
- Dominando la sobrecarga de operadores en C++: ejemplos prácticos y mejores prácticas
- Operadores en C# – Guía completa de operadores en C#
- Dominando los Arrays en C++: Declaración, Inicialización y Ejemplos Prácticos
- Instalación de Dev‑C++ en Windows: Guía paso a paso
- Desarrollo con Windows Forms en C#: Tutorial Práctico Paso a Paso
- Entendiendo Interfaces en C#: Definición, Ejemplo y Uso Práctico
- Entendiendo las clases de almacenamiento en C: ámbito, vida y rendimiento
- Dominando funciones en C: Estructura, declaración y mejores prácticas
- Dominando la lógica condicional en C#: If, If-Else, If-ElseIf y sentencias If anidadas