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č public
u 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
, protected
i 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 klasepublic
u izvedenoj klasi, aprotected
članovi osnovne klase ostajuprotected
u izvedenoj klasi. - zaštićeno nasljeđivanje čini
public
iprotected
članove osnovne klaseprotected
u izvedenoj klasi. - privatno nasljeđivanje čini
public
iprotected
članove osnovne klaseprivate
u 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 PublicDerived
iz Base
u 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 ProtectedDerived
iz Base
u zaštićenom načinu .
Kao rezultat, u ProtectedDerived
:
- prot, pub i
getPVT()
nasljeđuju se kao zaštićeni . pvt
je 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 ProtectedDerived
kako 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 PrivateDerived
iz Base
u privatnom modu .
Kao rezultat, u PrivateDerived
:
- prot,
pub
agetPVT()
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 PrivateDerived
kako 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) |