Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> C Sprache

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:

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:

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:

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:

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

  1. Die richtige Cloud-Strategie wählen: Public, Private und Hybrid Solutions erklärt
  2. Public Cloud: Vorteile, Risiken und wichtige Überlegungen
  3. Private Cloud: Vorteile, Nachteile und wie sie Ihre Geschäftsdaten schützt
  4. C++-Variablen, Literale und Konstanten meistern: Ein umfassender Leitfaden
  5. C++ Klassen & Objekte: Praktischer Leitfaden zur objektorientierten Programmierung
  6. C++ Speicherverwaltung meistern: Experten-Einsatz von new und delete
  7. C++ Friend-Funktionen und Friend-Klassen: Zugriffskontrolle meistern
  8. C++ Structures vs. Classes: Praktischer Leitfaden für Embedded-Entwickler
  9. Sigfox startet Private Area Network, verbessert Geolocation und erweitert IoT-Lösungen
  10. C++ Struct vs. Class: Wichtige Unterschiede, Syntax und beste Anwendungsfälle