Selles õpetuses õpime näidete abil kasutama C ++ keeles avalikku, kaitstud ja privaatset pärandit.
C ++ pärimise korral võime tuletada lasteklassid baasklassist erinevates juurdepääsurežiimides. Näiteks,
class Base (… .… … . ); class Derived : public Base (… .… … . );
Pange tähele publickoodis olevat märksõna
class Derived : public Base
See tähendab, et oleme avalikus režiimis loonud tuletatud klassi baasklassist . Teise võimalusena võime tuletada klassid ka kaitstud või privaatsetes režiimides.
Need 3 märksõnad ( public, protected, ja private) nimetatakse juurdepääsu specifiers C ++ pärandist.
avalik, kaitstud ja privaatne pärand C ++ keeles
avaliku , kaitstud ja erasektori pärandist on järgmised tunnused:
- avaliku pärandist teeb
publicliikmed baasklasspublicon tuletatud klassi japrotectedliikmed baasklass jäävadprotectedka tuletatud klassi. - kaitstud pärand muudab tuletatud klassi baasklassi
publicja selleprotectedliikmedprotected. - privaatne pärimine muudab tuletatud klassi baasklassi
publicja selleprotectedliikmedprivate.
Märkus: private baasklassi liikmed pole tuletatud klassile ligipääsetavad.
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 )
Näide 1: C ++ avalik pärand
// 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; )
Väljund
Privaatne = 1 Kaitstud = 2 Avalik = 3
Siin oleme saadud PublicDerivedalates Baseon avaliku režiimis .
Selle tulemusena PublicDerived:
- prot on päritud kaitstuna .
- pub ja
getPVT()päranduvad kui avaliku . - Pvt on kättesaamatud, sest see on privaatne sisse
Base.
Kuna eraisikutele ja kaitstud liikmetele pole juurdepääsu, peame looma avalikud funktsioonid getPVT()ja getProt()neile juurde pääsema:
// Error: member "Base::pvt" is inaccessible cout << "Private = " << object1.pvt; // Error: member "Base::prot" is inaccessible cout << "Protected = " << object1.prot;
Juurdepääs avalikule pärimisele
| Juurdepääsetavus | eraliikmed | kaitstud liikmed | avalikud liikmed |
|---|---|---|---|
| Põhiklass | Jah | Jah | Jah |
| Tuletatud klass | Ei | Jah | Jah |
Näide 2: C ++ kaitstud pärand
// 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; )
Väljund
Privaatsele ei pääse juurde. Kaitstud = 2 Avalik = 3
Siin oleme saadud ProtectedDerivedalates Baseon kaitstud režiimis .
Selle tulemusena ProtectedDerived:
- prot, pubi ja
getPVT()on päritud kui kaitstud . pvton kättesaamatud, sest see on privaatne sisseBase.
Nagu me teame, ei saa kaitstud liikmetele otse juurde pääseda.
Seetõttu ei saa me kasutada getPVT()alates ProtectedDerived. Seetõttu peame pubi muutujale juurdepääsu saamiseks looma getPub()funktsiooni ProtectedDerived.
// Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;
Juurdepääsetavus kaitstud pärandis
| Juurdepääsetavus | eraliikmed | kaitstud liikmed | avalikud liikmed |
|---|---|---|---|
| Põhiklass | Jah | Jah | Jah |
| Tuletatud klass | Ei | Jah | Jah (päritud kaitstud muutujatena) |
Näide 3: C ++ privaatne pärand
// 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; )
Väljund
Privaatsele ei pääse juurde. Kaitstud = 2 Avalik = 3
Siin oleme saadud PrivateDerivedalates Baseon privaatne režiimis .
Selle tulemusena PrivateDerived:
- prot,
pubjagetPVT()on päritud nii era- . - Pvt on kättesaamatud, sest see on privaatne sisse
Base.
Nagu teame, ei saa eraliikmetele otse juurde pääseda.
Seetõttu ei saa me kasutada getPVT()alates PrivateDerived. Seetõttu peame pubi muutujale juurdepääsu saamiseks looma getPub()funktsiooni PrivateDerived.
// Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;
Juurdepääs erapärandile
| Juurdepääsetavus | eraliikmed | kaitstud liikmed | avalikud liikmed |
|---|---|---|---|
| Põhiklass | Jah | Jah | Jah |
| Tuletatud klass | Ei | Jah (päritud privaatsete muutujatena) | Jah (päritud privaatsete muutujatena) |








