Empfohlen, 2021

Tipp Der Redaktion

Unterschied zwischen Einzel- und Mehrfachvererbung

Vererbung unterstützt stark das Konzept der Wiederverwendbarkeit, dh neu erstellte Klassen verwenden die Eigenschaften bereits vorhandener Klassen. Der Zugriffsbezeichner bestimmt, auf welche Weise der Basisklassenmember von der abgeleiteten Klasse geerbt wird. Es gibt viele Möglichkeiten, die Vererbung einfach, mehrfach, hierarchisch, mehrstufig, hybride zu erreichen. Unser Hauptthema ist der Unterschied zwischen Einfach- und Mehrfachvererbung. Bei der einfachen Vererbung haben wir nur eine Basisklasse, die nur von einer abgeleiteten Klasse geerbt wird. Bei der Mehrfachvererbung haben wir mehr als zwei Basisklassen, die von nur einer abgeleiteten Klasse gemeinsam vererbt werden.


Vergleichstabelle

VergleichsgrundlageEinzelne VererbungMehrfachvererbung
BasicAbgeleitete Klasse erbt eine einzelne Basisklasse.Abgeleitete Klasse erbt zwei oder mehr als zwei Basisklassen.
ImplementierungKlasse abgeleitete Klasse: Zugriffsklasse access_specifierVon der Klasse abgeleitete _Klasse: Access_specifier Base_class1, Access_specifier Base_class2, ....
Zugriff
Abgeleitete Klasse greift auf die Funktionen einer einzelnen Basisklasse zuAbgeleitete Klasse greift auf die kombinierten Funktionen von geerbten Basisklassen zu
SichtweiteÖffentlich, privat, geschütztÖffentlich, privat, geschützt
LaufzeitBenötigen Sie wenig Laufzeit über KopfErfordert zusätzlichen Laufzeitaufwand im Vergleich zur einfachen Vererbung

Definition der einfachen Vererbung

In Einzelvererbung gibt es eine einzelne Basisklasse und eine einzelne abgeleitete Klasse. Abgeleitete Klasse erbt die Basisklasse entweder öffentlich, geschützt und privat. Auf die Mitglieder der Basisklasse kann über eine abgeleitete Klasse gemäß dem Zugriffsspezifizierer zugegriffen werden, der beim Erben der Basisklasse angegeben wurde.

Ein reales Beispiel: Wir haben zwei Klassen, eine "Konto-Klasse" und eine "Sparkonto-Klasse". In diesem Fall kann das Speichern von Kontoklassen die Funktion von "Kontoklasse" erben, so dass die Klasse "Kontoklasse" zur Basis- / Super- / Elternklasse für das Speichern von Kontoklasse wird und "Speicherkontoklasse" eine abgeleitete Klasse ist.

Die Attribute der "Kontoklasse" sind hier acc_no (privat) und balance (public), und Member-Funktionen sind initialize () und get_accno (), die öffentlich sind. Nun wird „Konto-Klasse“ öffentlich an „Konto-Klasse speichern“ vererbt, sodass auf alle öffentlichen Mitglieder von „Konto-Klasse“ direkt durch „Konto-Konto-Speicherung“ zugegriffen werden kann. Es kann auf das private Mitglied der "Account-Klasse" über öffentliche Member-Funktionen der "Account-Klasse" zugreifen, kann jedoch nicht direkt auf sie zugreifen.

Implementierung von Einzelvererbung:

 # include mit Namensraum std; Klasse Konto {int acc_no, ; public: Floatbilanz; void initialize (int x, int y) {acc_no = x; Gleichgewicht = y; } int get_accno. () {return acc_no; }}; class Saving_acc: public Konto {float intrest_rate; public: // Konstruktor der Klasse Saving_acc Saving_acc (int c) {interest_rate = c; } void display () {cout < 

Definition der Mehrfachvererbung

Die Mehrfachvererbung ermöglicht es der abgeleiteten Klasse, kombinierte Merkmale von mehr als einer Basisklasse zu erben, dh wir haben eine einzelne abgeleitete Klasse und mehrere Basisklassen. Jede Basisklasse muss vererbt werden, indem der separate Zugriffsbezeichner für jede Klasse angegeben wird. Eine abgeleitete Klasse kann auf die Mitglieder der Basisklassen basierend auf dem Zugriffsspezifizierer zugreifen, von dem die Basisklasse geerbt wird.

Machen wir es mit dem Beispiel einfacher, wir haben drei Klassen, nämlich Fahrrad, Auto und Fahrzeug. „Vehicle“ kann nun die Funktionen von „Bike“ sowie von „Car“ übernehmen. So wird „Fahrzeug“ zur abgeleiteten Klasse und „Fahrrad“ und „Auto“ zur Basisklasse. "Fahrrad" und "Auto" werden nun öffentlich von "Fahrzeug" vererbt. Sie können auf alle öffentlichen Mitglieder von "Fahrrad" und "Auto" zugreifen. Da wir jedoch eine in "Auto" geschützte Entität Model_no haben, kann dies privat sein "Fahrzeug" erreichbar.

Implementierung von Mehrfachvererbung:

 # include using namespace std; Klasse Fahrrad {int engine_cost; ; public: void set_engine_cost (int x) {engine_cost = x; }}; Klasse Auto {protected: int Model_no; public: void set_Model_no (int p) {Model_no = p; }}; Klasse Vehical: öffentliches Fahrrad, öffentliches Auto {int no_of_wheels public: vehical (int w) {no_of_wheels = w; cout << "Keine Räder" < 

Hauptunterschiede zwischen Einzel- und Mehrfachvererbung

  1. Die Einzelvererbung ist eine abgeleitete Klasse mit einer einzelnen Basisklasse, während bei der Mehrfachvererbung zwei oder mehr als zwei Basisklassen, aber eine einzelne abgeleitete Klasse vorhanden ist.
  2. Mehrfachvererbung ist ziemlich verwirrend, da hier eine einzelne abgeleitete Klasse zwei oder mehr Basisklassen erbt. Wenn die Basisklassen ein Attribut oder eine Funktion mit demselben Namen haben, wird es für abgeleitete Klassen schwierig, das Attribut oder die Funktion der Basisklasse zu ermitteln, die sie ableiten muss.
  3. Gemeinkosten sind bei Einzelvererbung geringer. Im Falle einer mehrfachen Vererbung ruft die Objektkonstruktion oder -zerstörung jedoch die Konstruktoren und den Destruktor der übergeordneten Klasse in der Klassenhierarchie auf, was den Overhead erhöht.
  4. Einzelvererbung ist mehr in Richtung Spezialisierung. Während die Mehrfachvererbung eher der Verallgemeinerung dient.
  5. Da die einfache Vererbung weniger Overhead hat, hat sie im Vergleich zur mehrfachen Vererbung weniger Laufzeit.

Fazit

Vererbung erleichtert die Arbeit des Programmierers, als wäre eine Klasse bereits gebildet, können seine Merkmale bei Bedarf von anderen angepasst werden. Der Zugriffsbezeichner beschränkt zwar den Zugriff auf Mitglieder einer Basisklasse auf eine bestimmte Weise, erhöht jedoch die Sicherheit der Daten. Die Einzelvererbung ist in gewisser Weise einfacher und einfacher zu implementieren als die Mehrfachvererbung. Vererbung reduziert die Größe des Objektcodes, wirkt sich jedoch auch auf die Laufzeit des Programms aus.

Top