Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Construtor e Destrutor em Herança | Visão Geral de Herança
C++ Poo

bookConstrutor e Destrutor em Herança

Construtor da Classe Base Primeiro

No contexto de herança, os construtores desempenham um papel fundamental na correta inicialização das classes derivadas. Compreender a ordem em que os construtores são chamados é essencial para entender a dinâmica da herança. Observe a saída do trecho de código abaixo para ver a ordem das chamadas dos construtores.

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

Após a conclusão da inicialização pelo construtor da Classe Base, o construtor da Classe Derivada é executado.

A superclasse é chamada primeiro porque precisa inicializar os membros herdados da subclasse. Isso garante que a subclasse comece com um estado válido e possa depender do estado inicializado de sua classe 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() { }

No exemplo, o construtor é chamado com parâmetros na lista de inicialização. É necessário chamar explicitamente o construtor da superclasse dentro da lista de inicialização do construtor da subclasse. Se não especificar um construtor da classe base na lista de inicialização, o construtor padrão da superclasse será chamado automaticamente.

Destrutor da Classe Derivada Primeiro

Quando um objeto é destruído, os destrutores são invocados na ordem inversa de seus construtores. Isso significa que os destrutores são chamados primeiro para a classe mais derivada e, em seguida, para cada classe base na ordem inversa de sua declaração.

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

Somente após o destrutor da Classe Derivada concluir sua limpeza, o destrutor da Classe Base é invocado.

question mark

Qual é a ordem correta de chamadas de construtores e destrutores ao criar e destruir um objeto de uma classe derivada?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 4. Capítulo 4

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Suggested prompts:

Can you provide an example code snippet to illustrate this?

Why is it important for the base class constructor to run before the derived class constructor?

What happens if the base class doesn't have a default constructor?

Awesome!

Completion rate improved to 3.13

bookConstrutor e Destrutor em Herança

Deslize para mostrar o menu

Construtor da Classe Base Primeiro

No contexto de herança, os construtores desempenham um papel fundamental na correta inicialização das classes derivadas. Compreender a ordem em que os construtores são chamados é essencial para entender a dinâmica da herança. Observe a saída do trecho de código abaixo para ver a ordem das chamadas dos construtores.

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

Após a conclusão da inicialização pelo construtor da Classe Base, o construtor da Classe Derivada é executado.

A superclasse é chamada primeiro porque precisa inicializar os membros herdados da subclasse. Isso garante que a subclasse comece com um estado válido e possa depender do estado inicializado de sua classe 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() { }

No exemplo, o construtor é chamado com parâmetros na lista de inicialização. É necessário chamar explicitamente o construtor da superclasse dentro da lista de inicialização do construtor da subclasse. Se não especificar um construtor da classe base na lista de inicialização, o construtor padrão da superclasse será chamado automaticamente.

Destrutor da Classe Derivada Primeiro

Quando um objeto é destruído, os destrutores são invocados na ordem inversa de seus construtores. Isso significa que os destrutores são chamados primeiro para a classe mais derivada e, em seguida, para cada classe base na ordem inversa de sua declaração.

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

Somente após o destrutor da Classe Derivada concluir sua limpeza, o destrutor da Classe Base é invocado.

question mark

Qual é a ordem correta de chamadas de construtores e destrutores ao criar e destruir um objeto de uma classe derivada?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 4. Capítulo 4
some-alt