Avalik, kaitstud ja privaatne pärand C ++ programmeerimisel

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 baasklass publicon tuletatud klassi ja protectedliikmed baasklass jäävad protectedka tuletatud klassi.
  • kaitstud pärand muudab tuletatud klassi baasklassi publicja selle protectedliikmed protected.
  • privaatne pärimine muudab tuletatud klassi baasklassi publicja selle protectedliikmed private.

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 sisse Base.

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, pubja getPVT()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)

Huvitavad Artiklid...