Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Langue C

Héritage multiple, multiniveau et hiérarchique C++

Héritage multiple, multiniveau et hiérarchique C++

Dans ce didacticiel, nous découvrirons différents modèles d'héritage en programmation C++ :héritage multiple, multiniveau et hiérarchique avec des exemples.

L'héritage est l'une des principales caractéristiques d'un langage de programmation orienté objet. Il permet aux développeurs de logiciels de dériver une nouvelle classe à partir de la classe existante. La classe dérivée hérite des fonctionnalités de la classe de base (classe existante).

Il existe différents modèles d'héritage dans la programmation C++.

Héritage multiniveau C++

En programmation C++, non seulement vous pouvez dériver une classe de la classe de base, mais vous pouvez également dériver une classe de la classe dérivée. Cette forme d'héritage est connue sous le nom d'héritage multiniveau.

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

Ici, la classe B est dérivé de la classe de base A et la classe C est dérivé de la classe dérivée B .

Exemple 1 :Héritage multiniveau 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;
}

Sortie

Base class content.

Dans ce programme, la classe C est dérivé de la classe B (qui est dérivée de la classe de base A ).

L'obj objet de classe C est défini dans le main() fonction.

Lorsque le display() la fonction est appelée, display() en classe A est exécuté. C'est parce qu'il n'y a pas de display() fonction dans la classe C et classe B .

Le compilateur recherche d'abord le display() fonction dans la classe C . Puisque la fonction n'existe pas là, il recherche la fonction dans la classe B (comme C est dérivé de B ).

La fonction n'existe pas non plus dans la classe B , donc le compilateur le recherche dans la classe A (comme B est dérivé de A ).

Si display() la fonction existe en C , le compilateur remplace display() de classe A (en raison du remplacement de la fonction membre).

Héritage multiple C++

En programmation C++, une classe peut être dérivée de plusieurs parents. Par exemple, une classe Bat est dérivé des classes de base Mammal et Animal Ailé . Cela a du sens car la chauve-souris est un mammifère ainsi qu'un animal ailé.

Exemple 2 :Héritage multiple en programmation 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;
}

Sortie

Mammals can give direct birth.
Winged animal can flap.

Ambiguïté dans l'héritage multiple

Le problème le plus évident avec l'héritage multiple se produit lors du remplacement de fonction.

Supposons que deux classes de base aient une même fonction qui n'est pas remplacée dans la classe dérivée.

Si vous essayez d'appeler la fonction en utilisant l'objet de la classe dérivée, le compilateur affiche une erreur. C'est parce que le compilateur ne sait pas quelle fonction appeler. Par exemple,

class base1 {
  public:
      void someFunction( ) {....}  
};
class base2 {
    void someFunction( ) {....} 
};
class derived : public base1, public base2 {};

int main() {
    derived obj;
    obj.someFunction() // Error!  
}

Ce problème peut être résolu en utilisant la fonction de résolution de portée pour spécifier quelle fonction classer soit base1 ou base2

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

Héritage hiérarchique C++

Si plusieurs classes sont héritées de la classe de base, on parle d'héritage hiérarchique. Dans l'héritage hiérarchique, toutes les fonctionnalités communes aux classes enfants sont incluses dans la classe de base.

Par exemple, la physique, la chimie, la biologie sont dérivées de la classe Science. De même, Chien, Chat, Cheval sont dérivés de la classe Animal.

Syntaxe d'héritage hiérarchique

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

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

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

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

Exemple 3 :Héritage hiérarchique en programmation 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;
}

Sortie

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

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

Ici, à la fois le Dog et Cat les classes sont dérivées du Animal classer. Ainsi, les deux classes dérivées peuvent accéder au info() fonction appartenant au Animal classe.


Langue C

  1. Classe et objet C#
  2. Classe abstraite et méthode C#
  3. Classe partielle C# et méthode partielle
  4. Classe et méthode scellées C#
  5. Classes et objets C++
  6. Héritage C++ public, protégé et privé
  7. Fonction amie C++ et classes amies
  8. Différence entre structure et classe :expliquée avec un exemple C++
  9. Classes de stockage en C++