Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Constructor y Destructor en la Herencia | Visión General de la Herencia
POO en C++
course content

Contenido del Curso

POO en C++

POO en C++

1. Fundamentos de la POO en C++
2. Constructores y Destructores
3. Visión General de la Encapsulación
4. Visión General de la Herencia
5. Visión General del Polimorfismo

book
Constructor y Destructor en la Herencia

Constructor de la clase base primero

En el contexto de la herencia, los constructores desempeñan un papel fundamental en la correcta inicialización de las clases derivadas. Comprender la secuencia en la que se invocan los constructores es clave para entender la dinámica de la herencia. Observa la salida del siguiente fragmento de código para ver el orden de las llamadas a los constructores.

main.cpp

main.cpp

copy
12345678910111213141516
#include <iostream> class Base { public: Base() { std::cout << "Base constructor called" << std::endl; } }; class Derived : public Base { public: Derived() { std::cout << "Derived constructor called" << std::endl; } }; int main() { Derived derivedObj; }
Note
Nota

Una vez que el constructor de la clase base ha completado su inicialización, se ejecuta el constructor de la clase derivada.

La superclase se llama primero porque debe inicializar los miembros heredados de la subclase. Esto garantiza que la subclase comience con un estado válido y pueda confiar en el estado inicializado de su clase base.

main.cpp

main.cpp

copy
123456789101112131415161718
class Base { public: Base(int value) : data(value) {} private: int data; }; class Derived : public Base { public: Derived(int value) : Base(value) {} }; int main() { }

En el ejemplo, se llama al constructor con parámetros en la lista de inicialización. Es necesario llamar explícitamente al constructor de la superclase dentro de la lista de inicialización del constructor de la subclase. Si no se especifica un constructor de la clase base en la lista de inicialización, el constructor por defecto de la superclase se llama automáticamente.

Destructor de la Clase Derivada Primero

Cuando un objeto es destruido, los destructores se invocan en el orden inverso al de sus constructores. Esto significa que los destructores se llaman primero para la clase más derivada y luego para cada clase base en orden inverso al de su declaración.

main.cpp

main.cpp

copy
12345678910111213141516
#include <iostream> class Base { public: ~Base() { std::cout << "Base destructor called" << std::endl; } }; class Derived : public Base { public: ~Derived() { std::cout << "Derived destructor called" << std::endl; } }; int main() { Derived derivedObj; }
Note
Nota

Solo después de que el destructor de la Clase Derivada haya terminado su limpieza, se invoca el destructor de la Clase Base.

question mark

¿Cuál es el orden correcto de llamadas a constructores y destructores al crear y destruir un objeto de una clase derivada?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 4. Capítulo 4

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

course content

Contenido del Curso

POO en C++

POO en C++

1. Fundamentos de la POO en C++
2. Constructores y Destructores
3. Visión General de la Encapsulación
4. Visión General de la Herencia
5. Visión General del Polimorfismo

book
Constructor y Destructor en la Herencia

Constructor de la clase base primero

En el contexto de la herencia, los constructores desempeñan un papel fundamental en la correcta inicialización de las clases derivadas. Comprender la secuencia en la que se invocan los constructores es clave para entender la dinámica de la herencia. Observa la salida del siguiente fragmento de código para ver el orden de las llamadas a los constructores.

main.cpp

main.cpp

copy
12345678910111213141516
#include <iostream> class Base { public: Base() { std::cout << "Base constructor called" << std::endl; } }; class Derived : public Base { public: Derived() { std::cout << "Derived constructor called" << std::endl; } }; int main() { Derived derivedObj; }
Note
Nota

Una vez que el constructor de la clase base ha completado su inicialización, se ejecuta el constructor de la clase derivada.

La superclase se llama primero porque debe inicializar los miembros heredados de la subclase. Esto garantiza que la subclase comience con un estado válido y pueda confiar en el estado inicializado de su clase base.

main.cpp

main.cpp

copy
123456789101112131415161718
class Base { public: Base(int value) : data(value) {} private: int data; }; class Derived : public Base { public: Derived(int value) : Base(value) {} }; int main() { }

En el ejemplo, se llama al constructor con parámetros en la lista de inicialización. Es necesario llamar explícitamente al constructor de la superclase dentro de la lista de inicialización del constructor de la subclase. Si no se especifica un constructor de la clase base en la lista de inicialización, el constructor por defecto de la superclase se llama automáticamente.

Destructor de la Clase Derivada Primero

Cuando un objeto es destruido, los destructores se invocan en el orden inverso al de sus constructores. Esto significa que los destructores se llaman primero para la clase más derivada y luego para cada clase base en orden inverso al de su declaración.

main.cpp

main.cpp

copy
12345678910111213141516
#include <iostream> class Base { public: ~Base() { std::cout << "Base destructor called" << std::endl; } }; class Derived : public Base { public: ~Derived() { std::cout << "Derived destructor called" << std::endl; } }; int main() { Derived derivedObj; }
Note
Nota

Solo después de que el destructor de la Clase Derivada haya terminado su limpieza, se invoca el destructor de la Clase Base.

question mark

¿Cuál es el orden correcto de llamadas a constructores y destructores al crear y destruir un objeto de una clase derivada?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 4. Capítulo 4
some-alt