C ++ programavimo viešasis, saugomas ir privatus paveldėjimas

Šioje pamokoje išmoksime naudoti viešąjį, saugomą ir privatų paveldėjimą C ++ formatu, pasitelkdami pavyzdžius.

C ++ paveldėjimo atveju galime gauti vaikų klasę iš bazinės klasės skirtingais prieigos režimais. Pavyzdžiui,

 class Base (… .… … . ); class Derived : public Base (… .… … . );

Atkreipkite dėmesį į raktinį žodį publickode

 class Derived : public Base

Tai reiškia, kad viešajame režime sukūrėme išvestinę klasę iš bazinės klasės . Arba taip pat galime išvesti klases saugomais arba privačiais režimais.

Šie 3 raktiniai žodžiai ( public,, protectedir private) yra žinomi kaip prieigos specifikatoriai C ++ paveldėjime.

viešasis, saugomas ir privatus paveldėjimas C ++

viešasis , saugomas ir privatus paveldėjimas turi šias savybes:

  • viešojo paveldėjimas daro publicnarius bazinės klasės publicį gautą klasės, ir protectedapie bazine klase prisijungę lieka protectediš gautų klasėje.
  • saugomas paveldėjimas padaro išvestinės klasės bazinę klasę publicir jos protectednarius protected.
  • privatus paveldėjimas sudaro išvestinės klasės bazinę klasę publicir jos protectednarius private.

Pastaba: private išvestinei klasei neprieinami pagrindinės klasės nariai.

 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 pavyzdys: C ++ viešasis paveldėjimas

 // 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; )

Rezultatas

 Privati ​​= 1 Saugoma = 2 Vieša = 3

Čia mes kilęs PublicDerivedBasevisų visuomenės režimu .

Dėl to PublicDerived:

  • prot paveldima kaip saugoma .
  • baras ir getPVT()yra paveldimi kaip vieši .
  • Pvt yra nepasiekiamas, nes jis yra privatus ir Base.

Kadangi privačių ir saugomų narių negalima pasiekti, turime sukurti viešąsias funkcijas getPVT()ir getProt()prieiti prie jų:

 // Error: member "Base::pvt" is inaccessible cout << "Private = " << object1.pvt; // Error: member "Base::prot" is inaccessible cout << "Protected = " << object1.prot;

Prieinamumas visuomenės paveldėjimo srityje

Prieinamumas privatūs nariai saugomų narių visuomenės nariai
Pagrindinė klasė Taip Taip Taip
Išvestinė klasė Ne Taip Taip

2 pavyzdys: C ++ apsaugotas paveldėjimas

 // 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; )

Rezultatas

Prie privataus negalima prisijungti. Saugoma = 2 Vieša = 3

Čia mes kilęs ProtectedDerivedBaseį saugomą režimu .

Dėl to ProtectedDerived:

  • prot, pub ir getPVT()yra paveldimi kaip saugomi .
  • pvtyra nepasiekiamas, nes jis yra privatus ir Base.

Kaip žinome, su saugomais nariais negalima tiesiogiai susisiekti.

Todėl negalime naudoti getPVT()nuo ProtectedDerived. Štai kodėl mes turime sukurti getPub()funkciją ProtectedDerived, kad galėtume pasiekti „pub“ kintamąjį.

 // Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;

Prieinamumas saugant paveldėjimą

Prieinamumas privatūs nariai saugomų narių visuomenės nariai
Pagrindinė klasė Taip Taip Taip
Išvestinė klasė Ne Taip Taip (paveldima kaip apsaugoti kintamieji)

3 pavyzdys: C ++ privatus paveldėjimas

 // 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; )

Rezultatas

Prie privataus negalima prisijungti. Saugoma = 2 Vieša = 3

Čia mes kilęs PrivateDerivedBaseį privatų režimu .

Dėl to PrivateDerived:

  • prot pubir getPVT()yra paveldimi kaip privatūs .
  • Pvt yra nepasiekiamas, nes jis yra privatus ir Base.

Kaip žinome, privačių narių tiesiogiai pasiekti negalima.

Todėl negalime naudoti getPVT()nuo PrivateDerived. Štai kodėl mes turime sukurti getPub()funkciją PrivateDerived, kad galėtume pasiekti „pub“ kintamąjį.

 // Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;

Prieinamumas privačiame paveldėjime

Prieinamumas privatūs nariai saugomų narių visuomenės nariai
Pagrindinė klasė Taip Taip Taip
Išvestinė klasė Ne Taip (paveldima kaip privatūs kintamieji) Taip (paveldima kaip privatūs kintamieji)

Įdomios straipsniai...