Ö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
public
Mitglieder der Basisklassepublic
in der abgeleiteten Klasse und derprotected
Mitglieder der Basisklasse bleibenprotected
in der abgeleiteten Klasse. - geschützte Vererbung macht die
public
undprotected
Mitglieder der Basisklasseprotected
in der abgeleiteten Klasse. - private Erbschaft macht die
public
undprotected
Mitglieder der Basisklasseprivate
in 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 . pvt
ist 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 ,
pub
undgetPVT()
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