Š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į public
kode
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
,, protected
ir 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
public
narius bazinės klasėspublic
į gautą klasės, irprotected
apie bazine klase prisijungę liekaprotected
iš gautų klasėje. - saugomas paveldėjimas padaro išvestinės klasės bazinę klasę
public
ir josprotected
nariusprotected
. - privatus paveldėjimas sudaro išvestinės klasės bazinę klasę
public
ir josprotected
nariusprivate
.
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 PublicDerived
iš Base
visų 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 ProtectedDerived
iš Base
į saugomą režimu .
Dėl to ProtectedDerived
:
- prot, pub ir
getPVT()
yra paveldimi kaip saugomi . pvt
yra 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 PrivateDerived
iš Base
į privatų režimu .
Dėl to PrivateDerived
:
- prot
pub
irgetPVT()
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) |