Constructores y listas de inicialización de miembros
Inicialice los miembros de forma clara mediante listas de inicialización de miembros.
Constructores y listas de inicialización de miembros es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C++ Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C++ Academy incluye 4 lecciones en total.
¿Qué es un constructor?
Un constructor es un método especial que se ejecuta cuando se crea un objeto. Tiene el mismo nombre que la clase y no tiene tipo de retorno.
class Point {
public:
Point() { // default constructor
x_ = 0;
y_ = 0;
}
private:
int x_, y_;
};Constructores parametrizados
Los constructores pueden recibir parámetros y puede tener varias sobrecargas.
class Point {
int x_, y_;
public:
Point() : x_(0), y_(0) {}
Point(int x, int y) : x_(x), y_(y) {}
};Listas de inicialización de miembros
La sintaxis : member(value) antes del cuerpo es una lista de inicialización de miembros. Los miembros se inicializan aquí, no se asignan después dentro del cuerpo.
class Person {
std::string name_;
int age_;
public:
Person(std::string n, int a) : name_(std::move(n)), age_(a) {}
};¿Por qué usar listas de inicialización?
Los miembros se construyen exactamente una vez con el valor correcto. Sin la lista, se construyen con su valor predeterminado y después se les asigna un valor, lo que resulta ineficiente para los tipos no triviales.
Orden de inicialización
Los miembros se inicializan en el orden en que se declaran en la clase, no en el orden de la lista de inicialización. Mantenga ambos órdenes iguales para evitar confusiones.
Inicializadores predeterminados en la clase (C++11)
Puede proporcionar valores predeterminados a los miembros directamente en el cuerpo de la clase. Resulta útil cuando la mayoría de los constructores comparten los mismos valores predeterminados.
class Buffer {
size_t size_ = 0;
char* data_ = nullptr;
public:
Buffer() = default;
Buffer(size_t n) : size_(n), data_(new char[n]) {}
};= default y = delete
Solicite al compilador que proporcione o elimine un miembro especial:
class Widget {
public:
Widget() = default; // compiler-generated default
Widget(const Widget&) = delete; // disable copy
};Constructores delegantes (C++11)
Un constructor puede llamar a otro constructor de la misma clase para compartir la lógica de inicialización.
class Box {
int w_, h_, d_;
public:
Box(int w, int h, int d) : w_(w), h_(h), d_(d) {}
Box() : Box(1, 1, 1) {} // delegates to the 3-arg ctor
};Constructores explícitos
Los constructores de un solo argumento pueden utilizarse en conversiones implícitas. Marque estos constructores como explicit para evitar conversiones inesperadas.
class Vector {
public:
explicit Vector(size_t n);
};
Vector v = 10; // ERROR: explicit prevents this
Vector v(10); // OKDestructores
El destructor ~ClassName() se ejecuta cuando se destruye un objeto. Úselo para liberar recursos, como archivos, sockets y memoria sin procesar.
La regla de cinco (adelanto)
Si escribe alguna de las funciones miembro especiales (destructor, constructor de copia, asignación de copia, constructor de movimiento o asignación de movimiento), tenga en cuenta las cinco. Estos conceptos se abordan en el curso sobre semántica de movimiento.
Comprobación rápida
¿Qué determina el orden en que se inicializan los miembros de una clase?
Resumen
Use constructores para establecer el estado de los objetos. Prefiera las listas de inicialización de miembros a las asignaciones dentro del cuerpo. Marque los constructores de un solo argumento como explicit y use = default / = delete para expresar la intención.
Preguntas frecuentes
¿La lección «Constructores y listas de inicialización de miembros» es gratis?
Sí — el texto completo de «Constructores y listas de inicialización de miembros» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C++ Academy, actualiza a CoddyKit PRO. El curso de C++ Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Constructores y listas de inicialización de miembros»?
Inicialice los miembros de forma clara mediante listas de inicialización de miembros. Practicas C++ Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C++ Academy?
No se requiere experiencia previa. C++ Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Constructores y listas de inicialización de miembros»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C++ Academy?
Sí. Cada lección de C++ Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- struct frente a class: cuándo usar cada uno
- Variables y métodos miembro
- Constructores y listas de inicialización de miembros
- El puntero this y la encapsulación