Š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ėspublicį gautą klasės, irprotectedapie bazine klase prisijungę liekaprotectediš gautų klasėje. - saugomas paveldėjimas padaro išvestinės klasės bazinę klasę
publicir josprotectednariusprotected. - privatus paveldėjimas sudaro išvestinės klasės bazinę klasę
publicir josprotectednariusprivate.
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 PublicDerivediš Basevisų 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 ProtectedDerivediš Baseį saugomą režimu .
Dėl to ProtectedDerived:
- prot, pub ir
getPVT()yra paveldimi kaip saugomi . pvtyra nepasiekiamas, nes jis yra privatus irBase.
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 PrivateDerivediš Baseį privatų režimu .
Dėl to PrivateDerived:
- prot
pubirgetPVT()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) |








