Öffentliche, geschützte und private Vererbung in der C ++ - Programmierung

In diesem Tutorial lernen wir anhand von Beispielen, wie man öffentliche, geschützte und private Vererbung in C ++ verwendet.

Bei der C ++ - Vererbung können wir eine untergeordnete Klasse in verschiedenen Zugriffsmodi von der Basisklasse ableiten. Beispielsweise,

 class Base (… .… … . ); class Derived : public Base (… .… … . );

Beachten Sie das Schlüsselwort publicim Code

 class Derived : public Base

Dies bedeutet, dass wir im öffentlichen Modus eine abgeleitete Klasse aus der Basisklasse erstellt haben . Alternativ können wir auch Klassen im geschützten oder privaten Modus ableiten .

Diese drei Schlüsselwörter ( public, protected, und private) sind bekannt als Zugriffsbezeichner in C ++ Vererbung.

öffentliche, geschützte und private Vererbung in C ++

Öffentliche , geschützte und private Vererbung weisen die folgenden Merkmale auf:

  • öffentliche Vererbung macht die publicMitglieder der Basisklasse publicin der abgeleiteten Klasse, und die protectedMitglieder der Basisklasse verbleiben protectedin der abgeleiteten Klasse.
  • Durch geschützte Vererbung werden die publicund protectedMitglieder der Basisklasse protectedin der abgeleiteten Klasse.
  • Private Vererbung macht die publicund protectedMitglieder der Basisklasse privatein der abgeleiteten Klasse.

Hinweis: Auf private Mitglieder der Basisklasse kann die abgeleitete Klasse nicht zugreifen.

 class Base ( public: int x; protected: int y; private: int z; ); class PublicDerived: public Base ( // x is public // y is protected // z is not accessible from PublicDerived ); class ProtectedDerived: protected Base ( // x is protected // y is protected // z is not accessible from ProtectedDerived ); class PrivateDerived: private Base ( // x is private // y is private // z is not accessible from PrivateDerived )

Beispiel 1: Öffentliche Vererbung von C ++

 // C++ program to demonstrate the working of public inheritance #include using namespace std; class Base ( private: int pvt = 1; protected: int prot = 2; public: int pub = 3; // function to access private member int getPVT() ( return pvt; ) ); class PublicDerived : public Base ( public: // function to access protected member from Base int getProt() ( return prot; ) ); int main() ( PublicDerived object1; cout << "Private = " << object1.getPVT() << endl; cout << "Protected = " << object1.getProt() << endl; cout << "Public = " << object1.pub << endl; return 0; )

Ausgabe

 Privat = 1 geschützt = 2 öffentlich = 3

Hier haben wir abgeleitet PublicDerivedaus Basein den öffentlichen Modus .

Als Ergebnis in PublicDerived:

  • prot wird als geschützt vererbt .
  • Pub und getPVT()werden als öffentlich vererbt .
  • pvt ist nicht zugänglich, da es privat in ist Base.

Da private und geschützte Mitglieder nicht zugänglich sind, müssen wir öffentliche Funktionen erstellen getPVT()und getProt()darauf zugreifen:

 // Error: member "Base::pvt" is inaccessible cout << "Private = " << object1.pvt; // Error: member "Base::prot" is inaccessible cout << "Protected = " << object1.prot;

Zugänglichkeit bei der öffentlichen Vererbung

Barrierefreiheit private Mitglieder geschützte Mitglieder öffentliche Mitglieder
Basisklasse Ja Ja Ja
Abgeleitete Klasse Nein Ja Ja

Beispiel 2: C ++ geschützte Vererbung

 // C++ program to demonstrate the working of protected inheritance #include using namespace std; class Base ( private: int pvt = 1; protected: int prot = 2; public: int pub = 3; // function to access private member int getPVT() ( return pvt; ) ); class ProtectedDerived : protected Base ( public: // function to access protected member from Base int getProt() ( return prot; ) // function to access public member from Base int getPub() ( return pub; ) ); int main() ( ProtectedDerived object1; cout << "Private cannot be accessed." << endl; cout << "Protected = " << object1.getProt() << endl; cout << "Public = " << object1.getPub() << endl; return 0; )

Ausgabe

Auf Privat kann nicht zugegriffen werden. Geschützt = 2 Öffentlich = 3

Hier haben wir abgeleitet ProtectedDerivedaus Basein den geschützten Modus .

Als Ergebnis in ProtectedDerived:

  • prot, pub und getPVT()werden als geschützt vererbt .
  • pvtist nicht zugänglich, da es privat in ist Base.

Wie wir wissen, kann nicht direkt auf geschützte Mitglieder zugegriffen werden.

Infolgedessen können wir nicht getPVT()von verwenden ProtectedDerived. Aus diesem Grund müssen wir auch die getPub()Funktion erstellen, ProtectedDerivedum auf die Pub-Variable zugreifen zu können.

 // Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;

Zugänglichkeit bei geschützter Vererbung

Barrierefreiheit private Mitglieder geschützte Mitglieder öffentliche Mitglieder
Basisklasse Ja Ja Ja
Abgeleitete Klasse Nein Ja Ja (als geschützte Variablen geerbt)

Beispiel 3: Private C ++ - Vererbung

 // C++ program to demonstrate the working of private inheritance #include using namespace std; class Base ( private: int pvt = 1; protected: int prot = 2; public: int pub = 3; // function to access private member int getPVT() ( return pvt; ) ); class PrivateDerived : private Base ( public: // function to access protected member from Base int getProt() ( return prot; ) // function to access private member int getPub() ( return pub; ) ); int main() ( PrivateDerived object1; cout << "Private cannot be accessed." << endl; cout << "Protected = " << object1.getProt() << endl; cout << "Public = " << object1.getPub() << endl; return 0; )

Ausgabe

Auf Privat kann nicht zugegriffen werden. Geschützt = 2 Öffentlich = 3

Hier haben wir abgeleitet PrivateDerivedaus Basein privaten Modus .

Als Ergebnis in PrivateDerived:

  • prot pubund getPVT()werden als privat vererbt .
  • pvt ist nicht zugänglich, da es privat in ist Base.

Wie wir wissen, kann auf private Mitglieder nicht direkt zugegriffen werden.

Infolgedessen können wir nicht getPVT()von verwenden PrivateDerived. Aus diesem Grund müssen wir auch die getPub()Funktion erstellen, PrivateDerivedum auf die Pub-Variable zugreifen zu können.

 // Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;

Zugänglichkeit bei der privaten Vererbung

Barrierefreiheit private Mitglieder geschützte Mitglieder öffentliche Mitglieder
Basisklasse Ja Ja Ja
Abgeleitete Klasse Nein Ja (als private Variablen geerbt) Ja (als private Variablen geerbt)

Interessante Beiträge...