Programar em C++/Herança: diferenças entre revisões

Saltar para a navegação Saltar para a pesquisa
[edição não verificada][edição não verificada]
Temos uma série de classes que mantém relações de parentesco conforme mostramos nas seções anteriores. Em termos genéricos, classes que herdam características de uma base precisam de regras claras quando forem criadas e destruídas. Precisamos definir a sequência em que os construtores e destrutores serão chamados, uma vez que cada classe tem pelo menos um construtor e um destrutor.
 
Agora temos a questão: Quando é que os constructorsconstrutores são chamados quando eles são herdados?
* Quando um objeto da classe derivada é instanciado, o construtor da classe base é chamado primeiro seguido do construtor das classes derivadas, em sequência da base até a última classe derivada.
* Quando o objeto da classe derivada é destruído, o seu destrutor é chamado primeiro seguido dos destrutores das outras classes derivadas logo abaixo, em sequência até a base.
<source lang="cpp">
#include <iostream>
 
using namespace std;
 
class base
{
public:
base() { cout << "ConstructingConstruindo base\n" << endl; }
~base() { cout << "DestructingDestruindo base\n" << endl; }
};
 
class derived1derivada1 : public base
{
public:
derived1derivada1() { cout << "ConstructingConstruindo derived1\nderivada1" << endl; }
~derived1derivada1() { cout << "DestructingDestruindo derived1\nderivada1" << endl; }
};
 
class derived2derivada2: public derived1derivada1
{
public:
derived2() { cout << "ConstructingConstruindo derived2derivada2\n"; }
~derived2() { cout << "DestructingDestruindo derived2derivada2\n"; }
};
 
int main()
{
derived2derivada2 ob; // constructconstrói ande destructdestrói o objeto ob
#ifdef WIN32
system ("pause");
#endif
return 0;
}

Menu de navegação