Javna, zaščitena in zasebna dediščina pri programiranju na C ++

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 razreda publicv izpeljanem razredu, protectedčlani osnovnega razreda pa ostanejo protectedv izpeljanem razredu.
  • zaščiteno dedovanje naredi člane publicin protectedčlane osnovnega razreda protectedv izpeljanem razredu.
  • zasebno dedovanje naredi publicin protectedčlane osnovnega razreda privatev 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 v Base.

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 pubin getPVT()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)

Zanimive Članki...