V tej vadnici se bomo s pomočjo primerov naučili uporabljati javno, zaščiteno in zasebno dedovanje v jeziku C ++.
V dedovanju C ++ lahko v različnih načinih dostopa iz osnovnega razreda izpeljemo podrejeni razred. Na primer
class Base (… .… … . ); class Derived : public Base (… .… … . );
Upoštevajte ključno besedo publicv kodi
class Derived : public Base
To pomeni, da smo iz osnovnega razreda v javnem načinu ustvarili izpeljani razred . Lahko pa tudi izpeljemo razrede v zaščitenem ali zasebnem načinu.
Te 3 besede ( public, protectedin private) so znani kot specifiers dostopa C ++ dedovanje.
javno, zaščiteno in zasebno dedovanje v jeziku C ++
javna , zaščitena in zasebna dediščina imajo naslednje značilnosti:
- javno dedovanje naredi
publicčlane osnovnega razredapublicv izpeljanem razredu,protectedčlani osnovnega razreda pa ostanejoprotectedv izpeljanem razredu. - zaščiteno dedovanje naredi člane
publicinprotectedčlane osnovnega razredaprotectedv izpeljanem razredu. - zasebno dedovanje naredi
publicinprotectedčlane osnovnega razredaprivatev izpeljanem razredu.
Opomba: private člani osnovnega razreda niso dostopni izpeljanemu razredu.
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 )
Primer 1: Javno dedovanje C ++
// 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; )
Izhod
Zasebno = 1 Zaščiteno = 2 Javno = 3
Tukaj smo izhaja PublicDerivediz Basev javnem načinu .
Kot rezultat, v PublicDerived:
- prot je podedovan kot zaščiten .
- pub in
getPVT()so podedovani kot javni . - pvt ni dostopen, ker je zaseben v
Base.
Ker zasebni in zaščiteni člani niso dostopni, moramo ustvariti javne funkcije getPVT()in getProt()do njih dostopati:
// Error: member "Base::pvt" is inaccessible cout << "Private = " << object1.pvt; // Error: member "Base::prot" is inaccessible cout << "Protected = " << object1.prot;
Dostopnost v javni dediščini
| Dostopnost | zasebni člani | zaščiteni člani | javni člani |
|---|---|---|---|
| Osnovni razred | Da | Da | Da |
| Izpeljani razred | Ne | Da | Da |
Primer 2: Dedovanje, zaščiteno s C ++
// 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; )
Izhod
Do zasebnega ni mogoče dostopati. Zaščiteno = 2 Javno = 3
Tu smo izpeljali ProtectedDerivediz Basev zaščitenem načinu .
Kot rezultat, v ProtectedDerived:
- prot, pub in
getPVT()so podedovani kot zaščiteni . pvtje nedostopen, ker je zaseben vBase.
Kot vemo, do zaščitenih članov ni mogoče neposredno dostopati.
Kot rezultat tega ne moremo uporabljati getPVT()iz ProtectedDerived. Tudi zato moramo za dostop do spremenljivke pub ustvariti getPub()funkcijo ProtectedDerived.
// Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;
Dostopnost v zaščiteni dediščini
| Dostopnost | zasebni člani | zaščiteni člani | javni člani |
|---|---|---|---|
| Osnovni razred | Da | Da | Da |
| Izpeljani razred | Ne | Da | Da (podedovano kot zaščitene spremenljivke) |
3. primer: zasebno dedovanje C ++
// 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; )
Izhod
Do zasebnega ni mogoče dostopati. Zaščiteno = 2 Javno = 3
Tukaj smo izhaja PrivateDerivediz Basev zasebnem načinu .
Kot rezultat, v PrivateDerived:
- prot
pubingetPVT()so podedovane kot zasebne . - pvt ni dostopen, ker je zaseben v
Base.
Kot vemo, do zasebnih članov ni mogoče neposredno dostopati.
Kot rezultat tega ne moremo uporabljati getPVT()iz PrivateDerived. Tudi zato moramo za dostop do spremenljivke pub ustvariti getPub()funkcijo PrivateDerived.
// Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;
Dostopnost v zasebni dediščini
| Dostopnost | zasebni člani | zaščiteni člani | javni člani |
|---|---|---|---|
| Osnovni razred | Da | Da | Da |
| Izpeljani razred | Ne | Da (podedovano kot zasebne spremenljivke) | Da (podedovano kot zasebne spremenljivke) |








