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
course content

Conteúdo do Curso

C++ Poo

C++ Poo

1. Fundamentos de POO em C++
2. Construtores e Destrutores
3. Visão Geral do Encapsulamento
4. Visão Geral de Herança
5. Visão Geral do Polimorfismo

book
Construtor 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

course content

Conteúdo do Curso

C++ Poo

C++ Poo

1. Fundamentos de POO em C++
2. Construtores e Destrutores
3. Visão Geral do Encapsulamento
4. Visão Geral de Herança
5. Visão Geral do Polimorfismo

book
Construtor 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
some-alt