Clase Nº 9 - La Herencia
La Herencia
La herencia es una herramienta poderosa que proporciona un
marco adecuado para producir software fiable, comprensible, de bajo costo,
adaptable y reutilizable.
Es la relación que existe entre dos clases, en la que una
clase denominada derivada o subclase se crea a partir de otra ya existente,
denominada clase base o superclase.
La primera línea de cada declaración debe incluir la
siguiente sintaxis:
Class <nombre de la
clase derivada> : <tipo de herencia> <nombre de clase base>
Herencia Simple
Cuando sólo se tiene una clase base de la cual hereda la
clase derivada, se dice que hay herencia simple. Sin embargo, la herencia
simple no excluye la posibilidad de que de una misma clase base se pueda derivar
más de una subclase o clase derivada.
Ejemplo
#include <iostream.h>
class B { // clase raíz
public: int x;
};
class D : public B { // D deriva de B
public: int y; // y es privativa de la clase D
};
void main() { // ================================
B b1; // b1 es instancia de B (clase raíz)
b1.x =1;
cout << "b1.x = " << b1.x << endl;
D d1; // d1 es instancia de D (clase derivada)
d1.x = 2; // este elemento es herdado de la clase padre
d1.y = 3; // este elemento es privativo de d1
D d2; // otra instancia de D
d2.x = 4;
d2.y = 5;
cout << "d1.x = " << d1.x << endl;
cout << "d1.y = " << d1.y << endl;
cout << "d2.x = " << d2.x << endl;
cout << "d2.y = " << d2.y << endl;
}
class B { // clase raíz
public: int x;
};
class D : public B { // D deriva de B
public: int y; // y es privativa de la clase D
};
void main() { // ================================
B b1; // b1 es instancia de B (clase raíz)
b1.x =1;
cout << "b1.x = " << b1.x << endl;
D d1; // d1 es instancia de D (clase derivada)
d1.x = 2; // este elemento es herdado de la clase padre
d1.y = 3; // este elemento es privativo de d1
D d2; // otra instancia de D
d2.x = 4;
d2.y = 5;
cout << "d1.x = " << d1.x << endl;
cout << "d1.y = " << d1.y << endl;
cout << "d2.x = " << d2.x << endl;
cout << "d2.y = " << d2.y << endl;
}
Herencia Múltiple
Se usan dos o más clases base para derivar una clase. Es
decir, la clase derivada comparte los atributos y los métodos de más de una
clase.
Ejemplo
#include <iostream>
class ClaseA
{
public:
ClaseA() : valorA(10) { }
int LeerValor(){ return valorA; }
protected:
int valorA;
};
class ClaseB
{
public:
ClaseB() : valorB(20) { }
int LeerValor(){ return valorB; }
protected:
int valorB;
};
class ClaseC : public ClaseA, public ClaseB { };
int main()
{
ClaseC CC;
cout << CC.LeerValor() << endl;// error de compilación
cout << CC.ClaseA::LeerValor() << endl;
cin.get();
return 0;
}
Referencias
Comentarios
Publicar un comentario