Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Lenguaje C

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

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

En este tutorial, aprenderemos sobre diferentes modelos de herencia en 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).

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


Herencia multinivel de C++

En la programación de 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.

class A { 
... .. ... 
};
class B: public A {
... .. ...
};
class C: public B {
... ... ...
};

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


Ejemplo 1:herencia multinivel de C++

#include <iostream>
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

Base class content.

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

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

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

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

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

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


Herencia múltiple de C++

En programación C++, una clase puede derivarse de más de un padre. Por ejemplo, una clase Murciélago se deriva de las clases base Mammal y Animal Alado . 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 <iostream>
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

Mammals can give direct birth.
Winged animal can flap.

Ambigüedad en Herencia Múltiple

El problema más obvio con la herencia múltiple ocurre durante la anulació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 usando 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, ya sea base1 o base2

int main() {
    obj.base1::someFunction( );  // Function of base1 class is called
    obj.base2::someFunction();   // Function of base2 class is called.
}

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 funciones 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. Del mismo modo, Perro, Gato, Caballo se derivan de la clase Animal.


Sintaxis de herencia jerárquica

class base_class {
     ... .. ...
}

class first_derived_class: public base_class {
     ... .. ...
}

class second_derived_class: public base_class {
     ... .. ...
}

class third_derived_class: public base_class {
     ... .. ...
}

Ejemplo 3:Herencia jerárquica en programación C++

// C++ program to demonstrate hierarchical inheritance

#include <iostream>
using namespace std;

// base class
class Animal {
   public:
    void info() {
        cout << "I am an animal." << endl;
    }
};

// derived class 1
class Dog : public Animal {
   public:
    void bark() {
        cout << "I am a Dog. Woof woof." << endl;
    }
};

// derived class 2
class Cat : public Animal {
   public:
    void meow() {
        cout << "I am a Cat. Meow." << endl;
    }
};

int main() {
    // Create object of Dog class
    Dog dog1;
    cout << "Dog Class:" << endl;
    dog1.info();  // Parent Class function
    dog1.bark();

    // Create object of Cat class
    Cat cat1;
    cout << "\nCat Class:" << endl;
    cat1.info();  // Parent Class function
    cat1.meow();

    return 0;
}

Salida

Dog Class:
I am an animal.
I am a Dog. Woof woof.

Cat Class:
I am an animal.
I am a Cat. Meow.

Aquí, tanto el Dog y Cat las clases se derivan del Animal clase. Como tal, ambas clases derivadas pueden acceder al info() función perteneciente al Animal clase.


Lenguaje C

  1. Clase y objeto de C#
  2. Clase y método abstractos de C#
  3. C# Clase parcial y método parcial
  4. Clase y método sellados de C#
  5. Clases y objetos de C++
  6. Herencia pública, protegida y privada de C++
  7. Función amiga de C++ y Clases amigas
  8. Diferencia entre estructura y clase:explicada con el ejemplo de C++
  9. Clases de almacenamiento en C++
  10. C++ Fecha y hora
  11. Polimorfismo en C++