miércoles, 30 de septiembre de 2015

Constructores y destructores en clases derivadas

Sabemos que una clase derivada hereda los miembros de su clase base, en tal forma cuando se crea un objeto de la clase derivada, se necesita llamar al constructor de la clase base, para inicializar los miembros de la clase base del objeto de la clase derivada.
Los constructores de la clase base  no se heredan a  las clases derivadas, pero  la clase derivada pueden llamar a los constructores de la clase base.
Los operadores de  asignacion tampoco se heredan a la clase derivada, pero tambien pueden llamarse en la clase derivada.
Un constructor de la clase derivada llamará primeramente al constructor de la clase base, para inicializar los miembros de la clase base que corresponden a la clase derivada.
Los destructores se llaman primero de la clase derivada y después al clase base.

Ejemplo
Codificación CodeBlocks

#include <iostream>
using namespace std;
class Primera
{
protected:
    int a;
public:
    Primera();
    ~Primera();
    void establecerA(int);
    int obtenerA();
    virtual void mostrar();
};
Primera::Primera()
{
    a=10;
    cout<<"Constructor clase Base\n\n";
}
Primera::~Primera()
{
    cout<<"Destructor clase Base\n\n";
}
void Primera::establecerA(int x)
{
    a=x;
}
int Primera::obtenerA()
{
    return a;
}
void Primera::mostrar()
{
    cout<<"El valor de a es "<<a<<endl<<endl;
}
class Segunda: public Primera
{
protected:
    double b;
public:
    Segunda(int,double);
    ~Segunda();
    void establecerB(double );
    double obtenerB();
    virtual void mostrar();
};
Segunda::Segunda(int x, double y)
{
    cout<<"a= "<<a<<endl;
    a=x;
    b=y;
    cout<<"Constructor de la derivada\n\n";
}
Segunda::~Segunda()
{
    cout<<"Destructor de clase derivada\n\n";
}
void Segunda::establecerB(double x)
{
    b=x;
}
double Segunda::obtenerB()
{
    return b;
}
void Segunda::mostrar()
{
    cout<<"despliegue de los datos de la clase derivada\n";
    cout<<" a= "<<a<<endl;
    cout<<" b= "<<b<<endl;
}
int main()
{
    Segunda s(7,4.0);
    s.mostrar();

    return 0;
}

No hay comentarios:

Publicar un comentario