Herencia múltiple, multinivel y jerárquica de C ++

En este artículo, aprenderá sobre diferentes modelos de herencia en la programación C ++: herencia múltiple, multinivel y jerárquica con ejemplos.

La herencia es una de las características principales de un lenguaje de programación orientado a objetos. Permite a los desarrolladores de software derivar una nueva clase de la clase existente. La clase derivada hereda las características de la clase base (clase existente).

Existen varios modelos de herencia en la programación C ++.

Herencia multinivel de C ++

En la programación C ++, no solo puede derivar una clase de la clase base, sino que también puede derivar una clase de la clase derivada. Esta forma de herencia se conoce como herencia multinivel.

clase A (… ); clase B: público A (…); clase C: público B (………);

Aquí, la clase B se deriva de la clase base A y la clase C se deriva de la clase B.

Ejemplo 1: herencia multinivel de C ++

 #include using namespace std; class A ( public: void display() ( cout<<"Base class content."; ) ); class B : public A ( ); class C : public B ( ); int main() ( C obj; obj.display(); return 0; )

Salida

 Contenido de la clase base.

En este programa, la clase C se deriva de la clase B (que se deriva de la clase base A).

El objeto obj de la clase C se define en la main()función.

Cuando display()se llama a la función, display()se ejecuta en la clase A. Es porque no hay display()función en clase C y clase B.

El compilador primero busca la display()función en la clase C. Dado que la función no existe allí, busca la función en la clase B (ya que C se deriva de B).

La función tampoco existe en la clase B, por lo que el compilador la busca en la clase A (ya que B se deriva de A).

Si la display()función existe en C, el compilador anula la display()clase A (debido a la anulación de la función miembro).

Herencia múltiple de C ++

En la programación C ++, una clase se puede derivar de más de un padre. Por ejemplo: una clase Bat se deriva de las clases base Mammal y WingedAnimal. Tiene sentido porque el murciélago es un mamífero además de un animal alado.

Ejemplo 2: Herencia múltiple en programación C ++

 #include using namespace std; class Mammal ( public: Mammal() ( cout << "Mammals can give direct birth." << endl; ) ); class WingedAnimal ( public: WingedAnimal() ( cout << "Winged animal can flap." << endl; ) ); class Bat: public Mammal, public WingedAnimal ( ); int main() ( Bat b1; return 0; ) 

Salida

Los mamíferos pueden dar a luz directamente. El animal alado puede aletear.

Ambigüedad en la herencia múltiple

El problema más obvio con la herencia múltiple se produce durante la sustitución de funciones.

Supongamos que dos clases base tienen la misma función que no se anula en la clase derivada.

Si intenta llamar a la función utilizando el objeto de la clase derivada, el compilador muestra un error. Es porque el compilador no sabe a qué función llamar. Por ejemplo,

 class base1 ( public: void someFunction( ) (… .… … . ) ); class base2 ( void someFunction( ) (… .… … . ) ); class derived : public base1, public base2 ( ); int main() ( derived obj; obj.someFunction() // Error! )  

Este problema se puede resolver usando la función de resolución de alcance para especificar qué función clasificar en base1 o base2

 int main () (obj.base1 :: someFunction (); // La función de la clase base1 se llama obj.base2 :: someFunction (); // Se llama a la función de la clase base2.)

Herencia jerárquica de C ++

Si se hereda más de una clase de la clase base, se conoce como herencia jerárquica. En la herencia jerárquica, todas las características que son comunes en las clases secundarias se incluyen en la clase base.

Por ejemplo: Física, Química, Biología se derivan de la clase de Ciencias.

Sintaxis de la herencia jerárquica

 clase clase_base (…) clase clase_primera_derivada: clase_base pública (…) clase clase_segunda_derivada: clase_base_ pública (…) clase clase_tercera_derivada: clase_base pública (…)

Articulos interesantes...