Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

C++ Meerdere, meerdere niveaus en hiërarchische overerving

C++ meervoudige, meervoudige en hiërarchische overerving

In deze zelfstudie leren we over verschillende overervingsmodellen in C++-programmering:meervoudige, meervoudige en hiërarchische overerving met voorbeelden.

Overerving is een van de belangrijkste kenmerken van een objectgeoriënteerde programmeertaal. Hiermee kunnen softwareontwikkelaars een nieuwe klasse afleiden uit de bestaande klasse. De afgeleide klasse erft de kenmerken van de basisklasse (bestaande klasse).

Er zijn verschillende modellen van overerving in C++-programmering.


C++ Multilevel-overerving

In C++-programmering kun je niet alleen een klasse afleiden uit de basisklasse, maar je kunt ook een klasse afleiden uit de afgeleide klasse. Deze vorm van overerving staat bekend als overerving op meerdere niveaus.

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

Hier, klasse B is afgeleid van de basisklasse A en de klasse C is afgeleid van de afgeleide klasse B .


Voorbeeld 1:C++ Multilevel Overerving

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

Uitvoer

Base class content.

In dit programma, klasse C is afgeleid van klasse B (die is afgeleid van basisklasse A ).

De obj object van klasse C is gedefinieerd in de main() functie.

Wanneer de display() functie wordt aangeroepen, display() in klas A is geëxecuteerd. Het is omdat er geen display() . is functie in klasse C en klasse B .

De compiler zoekt eerst naar de display() functie in klasse C . Aangezien de functie daar niet bestaat, zoekt hij naar de functie in klasse B (als C is afgeleid van B ).

De functie bestaat ook niet in klasse B , dus de compiler zoekt ernaar in klasse A (als B is afgeleid van A ).

Als display() functie bestaat in C , overschrijft de compiler display() van klasse A (vanwege het overschrijven van de ledenfunctie).


C++ Multiple Inheritance

In C++-programmering kan een klasse worden afgeleid van meer dan één ouder. Bijvoorbeeld A-klasse Bat is afgeleid van basisklassen Zoogdier en WingedAnimal . Dat is logisch, want de vleermuis is zowel een zoogdier als een gevleugeld dier.


Voorbeeld 2:Meerdere overerving in C++-programmering

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

Uitvoer

Mammals can give direct birth.
Winged animal can flap.

Ambiguïteit bij meervoudige overerving

Het meest voor de hand liggende probleem met meervoudige overerving treedt op tijdens het overschrijven van functies.

Stel dat twee basisklassen dezelfde functie hebben die niet wordt overschreven in de afgeleide klasse.

Als u de functie probeert aan te roepen met behulp van het object van de afgeleide klasse, geeft de compiler een fout weer. Het is omdat de compiler niet weet welke functie moet worden aangeroepen. Bijvoorbeeld,

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

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

Dit probleem kan worden opgelost met behulp van de scope-resolutiefunctie om aan te geven welke functie base1 of base2 moet classificeren.

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

C++ hiërarchische overerving

Als er meer dan één klasse wordt overgenomen van de basisklasse, wordt dit hiërarchische overerving genoemd. Bij hiërarchische overerving worden alle kenmerken die gebruikelijk zijn in onderliggende klassen opgenomen in de basisklasse.

Natuurkunde, scheikunde en biologie zijn bijvoorbeeld afgeleid van de wetenschapsklasse. Evenzo zijn hond, kat en paard afgeleid van de dierenklasse.


Syntaxis van hiërarchische overerving

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

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

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

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

Voorbeeld 3:Hiërarchische overerving in C++-programmering

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

Uitvoer

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

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

Hier, zowel de Dog en Cat klassen zijn afgeleid van de Animal klas. Als zodanig hebben beide afgeleide klassen toegang tot de info() functie die hoort bij de Animal klasse.


C Taal

  1. C# klasse en object
  2. C# abstracte klasse en methode
  3. C# Gedeeltelijke klasse en gedeeltelijke methode
  4. C# verzegelde klasse en methode
  5. C++ klassen en objecten
  6. C++ Openbare, beschermde en privé-erfenis
  7. C++ vriend Functie en vriend Klassen
  8. Verschil tussen structuur en klasse:uitgelegd met C++-voorbeeld
  9. Opslagklassen in C++
  10. C++ Datum en tijd
  11. Polymorfisme in C++