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

[edição não verificada][edição não verificada]
derivada(int x, int y): base(y) { j = x; cout << "Construindo derivada\n"; }// derivada usa x; y é passada em lista para a base.
~derivada() { cout << "Destruindo derivada\n"; }
void showmostrar() { cout << i << " " << j << "\n"; }
};
 
{
derivada ob(3, 4);
ob.showmostrar(); // mostra 4 3
#ifdef WIN32
system ("pause");
No exemplo, a o construtor da classe derivada é declarado com 2 argumentos (x e y). no entanto a função derivada() usa apenas um para inicializar a variável interna da classe, o segundo argumento é usado para passar o valor de inicialização para a classe base.
 
Vejamos mais um exemplo.:
 
<source lang="cpp">
#include <iostream>
int i;
public:
base1(int x) { i = x; cout << "ConstructingConstruindo base1\n"; }
~base1() { cout << "DestructingDestruindo base1\n"; }
};
 
int k;
public:
base2(int x) { k = x; cout << "ConstructingConstruindo base2\n"; }
~base2() { cout << "DestructingDestruindo base2\n"; }
};
 
class derivedderivada: public base1, public base2
{
int j;
public:
derivedderivada(int x, int y, int z): base1(y), base2(z)
{ j = x; cout << "ConstructingConstruindo derivedderivada\n"; }
~derived() { cout << "DestructingDestruindo derivedderivada\n"; }
void showmostrar() { cout << i << " " << j << " " << k << "\n"; }
};
 
int main()
{
derivedderivada ob(3, 4, 5);
ob.showmostrar(); // displaysmostra 4 3 5
#ifdef WIN32
system ("pause");
#endif
return 0;
}