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 public
koodis 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
public
liikmed baasklasspublic
on tuletatud klassi japrotected
liikmed baasklass jäävadprotected
ka tuletatud klassi. - kaitstud pärand muudab tuletatud klassi baasklassi
public
ja selleprotected
liikmedprotected
. - privaatne pärimine muudab tuletatud klassi baasklassi
public
ja selleprotected
liikmedprivate
.
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 PublicDerived
alates Base
on 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 ProtectedDerived
alates Base
on kaitstud režiimis .
Selle tulemusena ProtectedDerived
:
- prot, pubi ja
getPVT()
on päritud kui kaitstud . pvt
on 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 PrivateDerived
alates Base
on privaatne režiimis .
Selle tulemusena PrivateDerived
:
- prot,
pub
jagetPVT()
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) |