V tomto tutoriále sa pomocou príkladov naučíme používať verejné, chránené a súkromné dedičstvo v C ++.
V dedičnosti C ++ môžeme podradenú triedu odvodiť zo základnej triedy v rôznych režimoch prístupu. Napríklad,
class Base (… .… … . ); class Derived : public Base (… .… … . );
Všimnite si kľúčové slovo public
v kóde
class Derived : public Base
To znamená, že sme vo verejnom režime vytvorili odvodenú triedu od základnej triedy . Alternatívne môžeme triedy odvodiť aj v chránenom alebo súkromnom režime.
Tieto 3 slová ( public
, protected
, a private
), sú známe ako specifikátorům prístupu v dedičnosti C ++.
verejné, chránené a súkromné dedenie v C ++
verejné , chránené a súkromné dedičstvo majú nasledujúce vlastnosti:
- verejné dedičstvo robí
public
členov základnej triedypublic
v odvodenej triede aprotected
členovia základnej triedy zostávajúprotected
v odvodenej triede. - chránené dedičstvo robí
public
aprotected
členov základnej triedyprotected
v odvodenej triede. - súkromné dedičstvo robí
public
aprotected
členov základnej triedyprivate
v odvodenej triede.
Poznámka: private
Členovia základnej triedy sú pre odvodenú triedu neprístupní.
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 )
Príklad 1: C ++ verejné dedičstvo
// 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; )
Výkon
Súkromné = 1 Chránené = 2 Verejné = 3
Tu sme odvodený PublicDerived
od Base
vo verejnom režime .
Výsledkom je, že v PublicDerived
:
- prot sa dedí ako chránený .
- krčma a
getPVT()
dedia sa ako verejné . - pvt je neprístupný, pretože je súkromný v
Base
.
Pretože súkromní a chránení členovia nie sú prístupní, musíme vytvoriť verejné funkcie getPVT()
a getProt()
získať k nim prístup:
// Error: member "Base::pvt" is inaccessible cout << "Private = " << object1.pvt; // Error: member "Base::prot" is inaccessible cout << "Protected = " << object1.prot;
Prístupnosť vo verejnom dedičstve
Prístupnosť | súkromní členovia | chránení členovia | verejní členovia |
---|---|---|---|
Základná trieda | Áno | Áno | Áno |
Odvodená trieda | Nie | Áno | Áno |
Príklad 2: Dedičnosť chránená v 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; )
Výkon
Nie je možné získať prístup k súkromným položkám. Chránené = 2 Verejné = 3
Tu sme odvodený ProtectedDerived
od Base
v chránenom režime .
Výsledkom je, že v ProtectedDerived
:
- prot, pub a
getPVT()
dedia sa ako chránené . pvt
je neprístupný, pretože je v súkromí vBase
.
Ako vieme, k chráneným členom nie je možné získať priamy prístup.
Vo výsledku nemôžeme použiť getPVT()
z ProtectedDerived
. Aj preto musíme vytvoriť getPub()
funkciu, ProtectedDerived
aby sme získali prístup k premennej pub.
// Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;
Prístupnosť v chránenom dedičstve
Prístupnosť | súkromní členovia | chránení členovia | verejní členovia |
---|---|---|---|
Základná trieda | Áno | Áno | Áno |
Odvodená trieda | Nie | Áno | Áno (zdedené ako chránené premenné) |
Príklad 3: C ++ súkromné dedičstvo
// 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; )
Výkon
Nie je možné získať prístup k súkromným položkám. Chránené = 2 Verejné = 3
Tu sme odvodili PrivateDerived
z Base
v súkromnom režime .
Výsledkom je, že v PrivateDerived
:
- prot,
pub
agetPVT()
dedia sa ako súkromné . - pvt je neprístupný, pretože je súkromný v
Base
.
Ako vieme, k súkromným členom nie je možné získať priamy prístup.
Vo výsledku nemôžeme použiť getPVT()
z PrivateDerived
. Aj preto musíme vytvoriť getPub()
funkciu, PrivateDerived
aby sme získali prístup k premennej pub.
// Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;
Prístupnosť v súkromnom dedičstve
Prístupnosť | súkromní členovia | chránení členovia | verejní členovia |
---|---|---|---|
Základná trieda | Áno | Áno | Áno |
Odvodená trieda | Nie | Áno (zdedené ako súkromné premenné) | Áno (zdedené ako súkromné premenné) |