C++ Vererbung: Public, Protected & Private erklärt
C++ Public, Protected und Private Vererbung
In diesem Tutorial lernen Sie die Verwendung von public, protected und private Vererbung in C++ anhand von Beispielen kennen.
Bei der C++ Vererbung können wir eine Kindklasse von der Basisklasse in verschiedenen Zugriffsmodi ableiten. Zum Beispiel:
class Base { .... ... .... }; class Derived : public Base { .... ... .... };
Beachten Sie das Schlüsselwort public im Code
class Derived : public Base
Das bedeutet, dass wir eine abgeleitete Klasse von der Basisklasse im public Modus erstellt haben. Alternativ können wir Klassen auch im protected oder private Modus ableiten.
Diese 3 Schlüsselwörter (public, protected und private) werden als Zugriffsspezifizierer in der C++ Vererbung bezeichnet.
public, protected und private Vererbung in C++
public, protected, und private Vererbung haben folgende Eigenschaften:
- public Vererbung macht
publicMitglieder der Basisklassepublicin der abgeleiteten Klasse, und dieprotectedMitglieder der Basisklasse bleibenprotectedin der abgeleiteten Klasse. - protected Vererbung macht die
publicundprotectedMitglieder der Basisklasseprotectedin der abgeleiteten Klasse. - private Vererbung macht die
publicundprotectedMitglieder der Basisklasseprivatein der abgeleiteten Klasse.
Hinweis: private Mitglieder der Basisklasse sind für die abgeleitete Klasse unzugänglich.
class Base { public: int x; protected: int y; private: int z; }; class PublicDerived: public Base { // x ist public // y ist protected // z ist nicht zugänglich von PublicDerived }; class ProtectedDerived: protected Base { // x ist protected // y ist protected // z ist nicht zugänglich von ProtectedDerived }; class PrivateDerived: private Base { // x ist private // y ist private // z ist nicht zugänglich von PrivateDerived }
Beispiel 1: C++ public Vererbung
// C++ Programm zur Demonstration der Funktionsweise von public Vererbung #include <iostream> using namespace std; class Base { private: int pvt = 1; protected: int prot = 2; public: int pub = 3; // Funktion zum Zugriff auf privates Mitglied int getPVT() { return pvt; } }; class PublicDerived : public Base { public: // Funktion zum Zugriff auf protected Mitglied von 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
Private = 1 Protected = 2 Public = 3
Hier haben wir PublicDerived von Base im public Modus abgeleitet.
Als Ergebnis in PublicDerived:
- prot wird als protected vererbt.
- pub und
getPVT()werden als public vererbt. - pvt ist unzugänglich, da es in
Baseprivate ist.
Da private und protected Mitglieder nicht von main() aus zugänglich sind, müssen wir öffentliche Funktionen getPVT() und getProt() erstellen, um auf sie zuzugreifen:
// Fehler: Mitglied "Base::pvt" ist unzugänglich cout << "Private = " << object1.pvt; // Fehler: Mitglied "Base::prot" ist unzugänglich cout << "Protected = " << object1.prot;
Beachten Sie, dass die getPVT() Funktion innerhalb von Base definiert wurde. Die getProt() Funktion wurde jedoch innerhalb von PublicDerived definiert.
Das liegt daran, dass pvt, was in Base private ist, für PublicDerived unzugänglich ist.
Jedoch ist prot für PublicDerived aufgrund der public Vererbung zugänglich. Daher kann getProt() die protected Variable von innerhalb von PublicDerived zugreifen.
Zugänglichkeit bei public Vererbung
| Zugänglichkeit | private Mitglieder | protected Mitglieder | public Mitglieder |
|---|---|---|---|
| Basisklasse | Ja | Ja | Ja |
| Abgeleitete Klasse | Nein | Ja | Ja |
Beispiel 2: C++ protected Vererbung
// C++ Programm zur Demonstration der Funktionsweise von protected Vererbung #include <iostream> using namespace std; class Base { private: int pvt = 1; protected: int prot = 2; public: int pub = 3; // Funktion zum Zugriff auf privates Mitglied int getPVT() { return pvt; } }; class ProtectedDerived : protected Base { public: // Funktion zum Zugriff auf protected Mitglied von Base int getProt() { return prot; } // Funktion zum Zugriff auf public Mitglied von Base int getPub() { return pub; } }; int main() { ProtectedDerived object1; cout << "Private kann nicht zugegriffen werden." << endl; cout << "Protected = " << object1.getProt() << endl; cout << "Public = " << object1.getPub() << endl; return 0; }
Ausgabe
Private kann nicht zugegriffen werden. Protected = 2 Public = 3
Hier haben wir ProtectedDerived von Base im protected Modus abgeleitet.
Als Ergebnis in ProtectedDerived:
- prot, pub und
getPVT()werden als protected vererbt. pvtist unzugänglich, da es inBaseprivate ist.
Wie wir wissen, können protected Mitglieder nicht direkt von außerhalb der Klasse zugegriffen werden. Daher können wir getPVT() nicht von ProtectedDerived aus verwenden.
Deshalb müssen wir auch die getPub() Funktion in ProtectedDerived erstellen, um auf die pub Variable zuzugreifen.
// Fehler: Mitglied "Base::getPVT()" ist unzugänglich cout << "Private = " << object1.getPVT(); // Fehler: Mitglied "Base::pub" ist unzugänglich cout << "Public = " << object1.pub;
Zugänglichkeit bei protected Vererbung
| Zugänglichkeit | private Mitglieder | protected Mitglieder | public Mitglieder |
|---|---|---|---|
| Basisklasse | Ja | Ja | Ja |
| Abgeleitete Klasse | Nein | Ja | Ja (als protected Variablen vererbt) |
Beispiel 3: C++ private Vererbung
// C++ Programm zur Demonstration der Funktionsweise von private Vererbung #include <iostream> using namespace std; class Base { private: int pvt = 1; protected: int prot = 2; public: int pub = 3; // Funktion zum Zugriff auf privates Mitglied int getPVT() { return pvt; } }; class PrivateDerived : private Base { public: // Funktion zum Zugriff auf protected Mitglied von Base int getProt() { return prot; } // Funktion zum Zugriff auf private Mitglied int getPub() { return pub; } }; int main() { PrivateDerived object1; cout << "Private kann nicht zugegriffen werden." << endl; cout << "Protected = " << object1.getProt() << endl; cout << "Public = " << object1.getPub() << endl; return 0; }
Ausgabe
Private kann nicht zugegriffen werden. Protected = 2 Public = 3
Hier haben wir PrivateDerived von Base im private Modus abgeleitet.
Als Ergebnis in PrivateDerived:
- prot,
pubundgetPVT()werden als private vererbt. - pvt ist unzugänglich, da es in
Baseprivate ist.
Wie wir wissen, können private Mitglieder nicht direkt von außerhalb der Klasse zugegriffen werden. Daher können wir getPVT() nicht von PrivateDerived aus verwenden.
Deshalb müssen wir auch die getPub() Funktion in PrivateDerived erstellen, um auf die pub Variable zuzugreifen.
// Fehler: Mitglied "Base::getPVT()" ist unzugänglich cout << "Private = " << object1.getPVT(); // Fehler: Mitglied "Base::pub" ist unzugänglich cout << "Public = " << object1.pub;
Zugänglichkeit bei private Vererbung
| Zugänglichkeit | private Mitglieder | protected Mitglieder | public Mitglieder |
|---|---|---|---|
| Basisklasse | Ja | Ja | Ja |
| Abgeleitete Klasse | Nein | Ja (als private Variablen vererbt) | Ja (als private Variablen vererbt) |
C Sprache
- Die richtige Cloud-Strategie wählen: Public, Private und Hybrid Solutions erklärt
- Public Cloud: Vorteile, Risiken und wichtige Überlegungen
- Private Cloud: Vorteile, Nachteile und wie sie Ihre Geschäftsdaten schützt
- C++-Variablen, Literale und Konstanten meistern: Ein umfassender Leitfaden
- C++ Klassen & Objekte: Praktischer Leitfaden zur objektorientierten Programmierung
- C++ Speicherverwaltung meistern: Experten-Einsatz von new und delete
- C++ Friend-Funktionen und Friend-Klassen: Zugriffskontrolle meistern
- C++ Structures vs. Classes: Praktischer Leitfaden für Embedded-Entwickler
- Sigfox startet Private Area Network, verbessert Geolocation und erweitert IoT-Lösungen
- C++ Struct vs. Class: Wichtige Unterschiede, Syntax und beste Anwendungsfälle