Ebben az oktatóanyagban példák segítségével megtanuljuk használni a nyilvános, védett és magán öröklést a C ++ nyelven.
A C ++ öröklésben különböző hozzáférési módokban levezethetünk egy gyermekosztályt az alaposztályból. Például,
class Base (… .… … . ); class Derived : public Base (… .… … . );
Figyelje publicmeg a kódban szereplő kulcsszót
class Derived : public Base
Ez azt jelenti, hogy nyilvános módban létrehoztunk egy származtatott osztályt az alaposztályból . Alternatív megoldásként származtathatunk védett vagy privát módban is.
Ez a 3 kulcsszó ( public,, protectedés private) hozzáférési specifikációként ismert a C ++ öröklésben.
nyilvános, védett és magánöröklés C ++ nyelven
nyilvános , védett, és saját öröklés jellemzői a következők:
- a nyilvános öröklés
publicaz alaposztály tagjaitpublica származtatott osztályba teszi , az alaposztály tagjai pedig a származtatottprotectedosztályban maradnakprotected. - a védett öröklés az alaposztály tagjait
publicésprotectedtagjait tesziprotecteda származtatott osztályba. - privát öröklés teszi
publicésprotectedtagjait az alap osztályprivatea származtatott osztály.
Megjegyzés: private az alaposztály tagjai nem férhetnek hozzá a származtatott osztályhoz.
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 )
1. példa: C ++ nyilvános öröklés
// 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; )
Kimenet
Privát = 1 Védett = 2 Nyilvános = 3
Itt, már abból PublicDerivedszármazó Basea nyilvános mód .
Ennek eredményeként PublicDerived:
- prot védettként öröklődik .
- kocsmában, és nyilvánosként
getPVT()örökölnek . - Pvt elérhetetlen, hiszen magán az
Base.
Mivel a magán- és védett tagok nem férhetnek hozzá, létre kell hoznunk a nyilvános funkciókat getPVT()és getProt()hozzáférnünk kell hozzájuk:
// Error: member "Base::pvt" is inaccessible cout << "Private = " << object1.pvt; // Error: member "Base::prot" is inaccessible cout << "Protected = " << object1.prot;
Hozzáférhetőség a nyilvános öröklésben
| Megközelíthetőség | magántagok | védett tagok | nyilvános tagok |
|---|---|---|---|
| Alaposztály | Igen | Igen | Igen |
| Származtatott osztály | Nem | Igen | Igen |
2. példa: C ++ védett öröklés
// 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; )
Kimenet
A privát nem érhető el. Védett = 2 Nyilvános = 3
Itt, már abból ProtectedDerivedszármazó Basea védett módban .
Ennek eredményeként ProtectedDerived:
- prot, kocsma és védettként
getPVT()öröklődnek . pvtmegközelíthetetlen, hiszen magán azBase.
Mint tudjuk, a védett tagok nem férhetnek hozzá közvetlenül.
Ennek eredményeként nem használhatjuk getPVT()a ProtectedDerived. Ezért kell létrehoznunk a getPub()függvényt ProtectedDeriveda kocsma változó eléréséhez.
// Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;
Hozzáférhetőség a védett öröklésben
| Megközelíthetőség | magántagok | védett tagok | nyilvános tagok |
|---|---|---|---|
| Alaposztály | Igen | Igen | Igen |
| Származtatott osztály | Nem | Igen | Igen (védett változóként öröklődik) |
3. példa: C ++ magánöröklés
// 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; )
Kimenet
A privát nem érhető el. Védett = 2 Nyilvános = 3
Itt, már abból PrivateDerivedszármazó Basea privát módban .
Ennek eredményeként PrivateDerived:
- prot,
pubésgetPVT()öröklődnek magán . - Pvt elérhetetlen, hiszen magán az
Base.
Mint tudjuk, a magántagokhoz nem lehet közvetlenül hozzáférni.
Ennek eredményeként nem használhatjuk getPVT()a PrivateDerived. Ezért kell létrehoznunk a getPub()függvényt PrivateDeriveda kocsma változó eléréséhez.
// Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;
Hozzáférhetőség a magánöröklésben
| Megközelíthetőség | magántagok | védett tagok | nyilvános tagok |
|---|---|---|---|
| Alaposztály | Igen | Igen | Igen |
| Származtatott osztály | Nem | Igen (privát változóként öröklődik) | Igen (privát változóként öröklődik) |








