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 publicv 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 triedypublicv odvodenej triede aprotectedčlenovia základnej triedy zostávajúprotectedv odvodenej triede. - chránené dedičstvo robí
publicaprotectedčlenov základnej triedyprotectedv odvodenej triede. - súkromné dedičstvo robí
publicaprotectedčlenov základnej triedyprivatev 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ý PublicDerivedod Basevo 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ý ProtectedDerivedod Basev chránenom režime .
Výsledkom je, že v ProtectedDerived:
- prot, pub a
getPVT()dedia sa ako chránené . pvtje 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, ProtectedDerivedaby 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 PrivateDerivedz Basev súkromnom režime .
Výsledkom je, že v PrivateDerived:
- prot,
pubagetPVT()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, PrivateDerivedaby 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é) |








