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 public
meg 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
public
az alaposztály tagjaitpublic
a származtatott osztályba teszi , az alaposztály tagjai pedig a származtatottprotected
osztályban maradnakprotected
. - a védett öröklés az alaposztály tagjait
public
ésprotected
tagjait tesziprotected
a származtatott osztályba. - privát öröklés teszi
public
ésprotected
tagjait az alap osztályprivate
a 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 PublicDerived
származó Base
a 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 ProtectedDerived
származó Base
a védett módban .
Ennek eredményeként ProtectedDerived
:
- prot, kocsma és védettként
getPVT()
öröklődnek . pvt
megkö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 ProtectedDerived
a 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 PrivateDerived
származó Base
a 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 PrivateDerived
a 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) |