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;
}
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

Entradas populares de este blog

La función

Clase Nº 5 - Ejercicio de vehículos

Clase Nº 6 - Figuras geométricas en Visual Studio C#