Öffentliche, geschützte und private Vererbung in C++
Öffentliche, geschützte und private Vererbung in C++
In diesem Tutorial lernen wir anhand von Beispielen die öffentliche, geschützte und private Vererbung in C++ zu verwenden.
Bei der C++-Vererbung können wir in verschiedenen Zugriffsmodi eine untergeordnete Klasse von der Basisklasse 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 im öffentlichen Modus eine abgeleitete Klasse von der Basisklasse erstellt haben . Alternativ können wir auch Klassen in protected ableiten oder privat Modi.
Diese 3 Schlüsselwörter (public , protected , und private ) werden als Zugriffsbezeichner bezeichnet in der C++-Vererbung.
öffentliche, geschützte und private Vererbung in C++
öffentlich , geschützt, und privat Vererbung haben die folgenden Merkmale:
- öffentliche Vererbung macht
publicMitglieder der Basisklassepublicin der abgeleiteten Klasse und derprotectedMitglieder der Basisklasse bleibenprotectedin der abgeleiteten Klasse. - geschützte Vererbung macht die
publicundprotectedMitglieder der Basisklasseprotectedin der abgeleiteten Klasse. - private Erbschaft macht die
publicundprotectedMitglieder der Basisklasseprivatein der abgeleiteten Klasse.
Hinweis: private Mitglieder der Basisklasse sind für die abgeleitete Klasse nicht zugänglich.
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 in C++
// C++ program to demonstrate the working of public inheritance
#include <iostream>
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
Private = 1 Protected = 2 Public = 3
Hier haben wir PublicDerived abgeleitet ab Base im öffentlichen Modus .
Als Ergebnis in PublicDerived :
- schützen wird als geschützt vererbt .
- Kneipe und
getPVT()werden als öffentlich vererbt . - pvt ist nicht zugänglich, da es privat ist in
Base.
Da privat und geschützt Mitglieder sind nicht über main() zugänglich , müssen wir öffentliche Funktionen erstellen getPVT() und getProt() um darauf zuzugreifen:
// Error: member "Base::pvt" is inaccessible
cout << "Private = " << object1.pvt;
// Error: member "Base::prot" is inaccessible
cout << "Protected = " << object1.prot;
Beachten Sie, dass der getPVT() Funktion wurde in Base definiert . Aber die getProt() Funktion wurde in PublicDerived definiert .
Das liegt daran, dass pvt , die privat ist in Base , ist für PublicDerived nicht zugänglich .
Allerdings prot ist für PublicDerived zugänglich aufgrund öffentlicher Erbschaft. Also getProt() kann innerhalb von PublicDerived auf die geschützte Variable zugreifen .
Zugänglichkeit bei öffentlicher 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 <iostream>
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
Private cannot be accessed. Protected = 2 Public = 3
Hier haben wir ProtectedDerived abgeleitet ab Base im geschützten Modus .
Als Ergebnis in ProtectedDerived :
- schützen , Kneipe und
getPVT()werden als geschützt vererbt . pvtist nicht zugänglich, da es privat ist inBase.
Wie wir wissen, geschützt Auf Mitglieder kann außerhalb des Kurses nicht direkt zugegriffen werden. Daher können wir getPVT() nicht verwenden ab ProtectedDerived .
Aus diesem Grund müssen wir auch den getPub() erstellen Funktion in ProtectedDerived um auf den pub zuzugreifen Variable.
// Error: member "Base::getPVT()" is inaccessible
cout << "Private = " << object1.getPVT();
// Error: member "Base::pub" is inaccessible
cout << "Public = " << object1.pub; Barrierefreiheit 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 <iostream>
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
Private cannot be accessed. Protected = 2 Public = 3
Hier haben wir PrivateDerived abgeleitet ab Base im privaten Modus .
Als Ergebnis in PrivateDerived :
- schützen ,
pubundgetPVT()werden als privat vererbt . - pvt ist nicht zugänglich, da es privat ist in
Base.
Wie wir wissen, kann von außerhalb der Klasse nicht direkt auf private Mitglieder zugegriffen werden. Daher können wir getPVT() nicht verwenden ab PrivateDerived .
Aus diesem Grund müssen wir auch den getPub() erstellen Funktion in PrivateDerived um auf den pub zuzugreifen Variable.
// Error: member "Base::getPVT()" is inaccessible
cout << "Private = " << object1.getPVT();
// Error: member "Base::pub" is inaccessible
cout << "Public = " << object1.pub; Barrierefreiheit bei privater 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) |
C Sprache
- Public Cloud vs. Private Cloud vs. Hybrid Cloud
- Vor- und Nachteile der öffentlichen Cloud
- Private Cloud-Vorteile und -Nachteile
- C++-Variablen, Literale und Konstanten
- C++-Klassen und -Objekte
- C++-Speicherverwaltung:neu und löschen
- C++ Friend-Funktion und Friend-Klassen
- Strukturen und Klassen in C++
- Private Area Network baut auf dem öffentlichen Sigfox-Netzwerk auf
- Unterschied zwischen Struktur und Klasse:Erklärt mit C++-Beispiel