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 klasepublicu izvedenoj klasi, aprotectedčlanovi osnovne klase ostajuprotectedu izvedenoj klasi. - zaštićeno nasljeđivanje čini
publiciprotectedčlanove osnovne klaseprotectedu izvedenoj klasi. - privatno nasljeđivanje čini
publiciprotectedčlanove osnovne klaseprivateu 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 uBase.
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,
pubagetPVT()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) |








