Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> C Sprache

C++ Mehrfach-, Mehrebenen- und hierarchische Vererbung

Mehrfache, mehrstufige und hierarchische Vererbung in C++

In diesem Tutorial lernen wir verschiedene Vererbungsmodelle in der C++-Programmierung kennen:Mehrfachvererbung, mehrstufige und hierarchische Vererbung mit Beispielen.

Vererbung ist eines der Kernmerkmale einer objektorientierten Programmiersprache. Es ermöglicht Softwareentwicklern, eine neue Klasse von der bestehenden Klasse abzuleiten. Die abgeleitete Klasse erbt die Eigenschaften der Basisklasse (vorhandene Klasse).

Es gibt verschiedene Vererbungsmodelle in der C++-Programmierung.


C++ Multilevel-Vererbung

Bei der C++-Programmierung können Sie nicht nur eine Klasse von der Basisklasse, sondern auch eine Klasse von der abgeleiteten Klasse ableiten. Diese Form der Vererbung wird als mehrstufige Vererbung bezeichnet.

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

Hier, Klasse B wird von der Basisklasse A abgeleitet und die Klasse C ist von der abgeleiteten Klasse B abgeleitet .


Beispiel 1:C++-Vererbung auf mehreren Ebenen

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

Ausgabe

Base class content.

In diesem Programm Klasse C ist von der Klasse B abgeleitet (die von der Basisklasse A abgeleitet ist ).

Das obj Objekt der Klasse C ist im main() definiert Funktion.

Wenn der display() Funktion aufgerufen wird, display() in Klasse A wird ausgeführt. Das liegt daran, dass display() nicht vorhanden ist Funktion in der Klasse C und Klasse B .

Der Compiler sucht zuerst nach display() Funktion in der Klasse C . Da die Funktion dort nicht existiert, sucht es in der Klasse B nach der Funktion (als C ist von B abgeleitet ).

Die Funktion existiert auch nicht in der Klasse B , also sucht der Compiler in der Klasse A danach (als B wird von A abgeleitet ).

Wenn display() Funktion existiert in C , überschreibt der Compiler display() der Klasse A (wegen Überschreiben der Mitgliedsfunktion).


C++-Mehrfachvererbung

In der C++-Programmierung kann eine Klasse von mehr als einem Elternteil abgeleitet werden. Zum Beispiel A-Klasse Fledermaus wird von der Basisklasse Mammal abgeleitet und WingedAnimal . Es macht Sinn, weil Fledermäuse sowohl ein Säugetier als auch ein geflügeltes Tier sind.


Beispiel 2:Mehrfachvererbung in der C++-Programmierung

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

Ausgabe

Mammals can give direct birth.
Winged animal can flap.

Mehrdeutigkeit bei Mehrfachvererbung

Das offensichtlichste Problem bei der Mehrfachvererbung tritt beim Überschreiben von Funktionen auf.

Angenommen, zwei Basisklassen haben dieselbe Funktion, die in der abgeleiteten Klasse nicht überschrieben wird.

Wenn Sie versuchen, die Funktion mit dem Objekt der abgeleiteten Klasse aufzurufen, zeigt der Compiler einen Fehler an. Das liegt daran, dass der Compiler nicht weiß, welche Funktion aufgerufen werden soll. Zum Beispiel

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

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

Dieses Problem kann gelöst werden, indem die Bereichsauflösungsfunktion verwendet wird, um anzugeben, welche Funktion entweder base1 oder base2 klassifiziert werden soll

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

Hierarchische C++-Vererbung

Wenn mehr als eine Klasse von der Basisklasse geerbt wird, wird dies als hierarchische Vererbung bezeichnet. Bei der hierarchischen Vererbung werden alle Merkmale, die in untergeordneten Klassen gemeinsam sind, in die Basisklasse aufgenommen.

Zum Beispiel sind Physik, Chemie, Biologie vom naturwissenschaftlichen Unterricht abgeleitet. In ähnlicher Weise werden Hund, Katze und Pferd von der Tierklasse abgeleitet.


Syntax der hierarchischen Vererbung

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

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

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

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

Beispiel 3:Hierarchische Vererbung in der C++-Programmierung

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

Ausgabe

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

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

Hier sowohl die Dog und Cat Klassen werden von Animal abgeleitet Klasse. Daher können beide abgeleiteten Klassen auf info() zugreifen Funktion, die zu Animal gehört Klasse.


C Sprache

  1. C#-Klasse und -Objekt
  2. Abstrakte C#-Klasse und -Methode
  3. C# Teilklasse und Teilmethode
  4. Versiegelte C#-Klasse und -Methode
  5. C++-Klassen und -Objekte
  6. Öffentliche, geschützte und private Vererbung in C++
  7. C++ Friend-Funktion und Friend-Klassen
  8. Unterschied zwischen Struktur und Klasse:Erklärt mit C++-Beispiel
  9. Speicherklassen in C++
  10. C++ Datum und Uhrzeit