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 public
v 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
, protected
in 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 razredapublic
v izpeljanem razredu,protected
člani osnovnega razreda pa ostanejoprotected
v izpeljanem razredu. - zaščiteno dedovanje naredi člane
public
inprotected
člane osnovnega razredaprotected
v izpeljanem razredu. - zasebno dedovanje naredi
public
inprotected
člane osnovnega razredaprivate
v 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 PublicDerived
iz Base
v 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 ProtectedDerived
iz Base
v zaščitenem načinu .
Kot rezultat, v ProtectedDerived
:
- prot, pub in
getPVT()
so podedovani kot zaščiteni . pvt
je 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 PrivateDerived
iz Base
v zasebnem načinu .
Kot rezultat, v PrivateDerived
:
- prot
pub
ingetPVT()
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) |