Javno, zaštićeno i privatno nasljeđivanje u programiranju na C ++

U ovom uputstvu naučit ćemo koristiti javno, zaštićeno i privatno nasljeđivanje u C ++ uz pomoć primjera.

U nasljeđivanju C ++ možemo iz osnovne klase izvesti podređenu klasu u različitim načinima pristupa. Na primjer,

 class Base (… .… … . ); class Derived : public Base (… .… … . );

Primijetite ključnu riječ publicu kodu

 class Derived : public Base

To znači da smo iz osnovne klase u javnom načinu stvorili izvedenu klasu . Alternativno, klase možemo izvoditi i u zaštićenim ili privatnim načinima.

Ove 3 ključne riječi ( public, protectedi private) su poznati kao pristup specifiers u C ++ baštinu.

javno, zaštićeno i privatno nasljedstvo u jeziku C ++

javno , zaštićeno i privatno nasljedstvo imaju sljedeće značajke:

  • javno nasljeđivanje čini publicčlanove osnovne klase publicu izvedenoj klasi, a protectedčlanovi osnovne klase ostaju protectedu izvedenoj klasi.
  • zaštićeno nasljeđivanje čini publici protectedčlanove osnovne klase protectedu izvedenoj klasi.
  • privatno nasljeđivanje čini publici protectedčlanove osnovne klase privateu izvedenoj klasi.

Napomena: private pripadnici osnovne klase nepristupačni su izvedenoj klasi.

 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 )

Primjer 1: C ++ javno nasljeđivanje

 // 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; )

Izlaz

 Privatno = 1 Zaštićeno = 2 Javno = 3

Ovdje smo izvedeni PublicDerivediz Baseu javnom načinu rada .

Kao rezultat, u PublicDerived:

  • prot se nasljeđuje kao zaštićen .
  • pub i getPVT()nasljeđuju se kao javni .
  • Pvt je nedostupan jer je privatno u Base.

Budući da privatni i zaštićeni članovi nisu dostupni, moramo stvoriti javne funkcije getPVT()i getProt()pristupiti im:

 // Error: member "Base::pvt" is inaccessible cout << "Private = " << object1.pvt; // Error: member "Base::prot" is inaccessible cout << "Protected = " << object1.prot;

Pristupačnost u javnom nasljeđivanju

Pristupačnost privatni članovi zaštićeni članovi članovi javnosti
Osnovna klasa Da Da Da
Izvedena klasa Ne Da Da

Primjer 2: Nasljeđivanje zaštićeno 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; )

Izlaz

Privatnom nije moguće pristupiti. Zaštićeno = 2 Javno = 3

Ovdje smo izveli ProtectedDerivediz Baseu zaštićenom načinu .

Kao rezultat, u ProtectedDerived:

  • prot, pub i getPVT()nasljeđuju se kao zaštićeni .
  • pvtje nepristupačna jer je privatna u Base.

Kao što znamo, zaštićenim članovima nije moguće izravno pristupiti.

Kao rezultat toga, ne možemo koristiti getPVT()od ProtectedDerived. To je također razlog zašto trebamo stvoriti getPub()funkciju ProtectedDerivedkako bismo pristupili varijabli pub.

 // Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;

Pristupačnost u zaštićenom nasljeđu

Pristupačnost privatni članovi zaštićeni članovi članovi javnosti
Osnovna klasa Da Da Da
Izvedena klasa Ne Da Da (nasljeđuje se kao zaštićene varijable)

Primjer 3: C ++ privatno nasljeđivanje

 // 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; )

Izlaz

Privatnom nije moguće pristupiti. Zaštićeno = 2 Javno = 3

Ovdje smo izvedeni PrivateDerivediz Baseu privatnom modu .

Kao rezultat, u PrivateDerived:

  • prot, puba getPVT()nasljeđuju se kao privatni .
  • Pvt je nedostupan jer je privatno u Base.

Kao što znamo, privatnim članovima nije moguće izravno pristupiti.

Kao rezultat toga, ne možemo koristiti getPVT()od PrivateDerived. To je također razlog zašto trebamo stvoriti getPub()funkciju PrivateDerivedkako bismo pristupili varijabli pub.

 // Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;

Pristupačnost u privatnom nasljeđivanju

Pristupačnost privatni članovi zaštićeni članovi članovi javnosti
Osnovna klasa Da Da Da
Izvedena klasa Ne Da (naslijeđeno kao privatne varijable) Da (naslijeđeno kao privatne varijable)

Zanimljivi članci...