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 public
im 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
public
Mitglieder der Basisklassepublic
in der abgeleiteten Klasse, und dieprotected
Mitglieder der Basisklasse verbleibenprotected
in der abgeleiteten Klasse. - Durch geschützte Vererbung werden die
public
undprotected
Mitglieder der Basisklasseprotected
in der abgeleiteten Klasse. - Private Vererbung macht die
public
undprotected
Mitglieder der Basisklasseprivate
in 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 PublicDerived
aus Base
in 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 ProtectedDerived
aus Base
in den geschützten Modus .
Als Ergebnis in ProtectedDerived
:
- prot, pub und
getPVT()
werden als geschützt vererbt . pvt
ist 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, ProtectedDerived
um 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 PrivateDerived
aus Base
in privaten Modus .
Als Ergebnis in PrivateDerived
:
- prot
pub
undgetPVT()
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, PrivateDerived
um 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) |