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 Basisklassepublicin der abgeleiteten Klasse, und dieprotectedMitglieder der Basisklasse verbleibenprotectedin der abgeleiteten Klasse. - Durch geschützte Vererbung werden die
publicundprotectedMitglieder der Basisklasseprotectedin der abgeleiteten Klasse. - Private Vererbung macht die
publicundprotectedMitglieder der Basisklasseprivatein 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 istBase.
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
pubundgetPVT()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) |








