В този урок ще се научим да използваме публично, защитено и частно наследство в C ++ с помощта на примери.
В наследяването на C ++ можем да извлечем дъщерен клас от базовия клас в различни режими на достъп. Например,
class Base (… .… … . ); class Derived : public Base (… .… … . );
Забележете ключовата дума publicв кода
class Derived : public Base
Това означава, че сме създали производен клас от базовия клас в публичен режим . Друга възможност е да извлечем класове в защитен или частен режим.
Тези 3 ключови думи ( public,, protectedи private) са известни като спецификатори на достъп в наследяването на C ++.
публично, защитено и частно наследство в C ++
публичното , защитеното и частното наследство имат следните характеристики:
- публичното наследяване прави
publicчленовете на базовия класpublicв производния клас, аprotectedчленовете на базовия клас оставатprotectedв производния клас. - защитеното наследяване прави
publicиprotectedчленове на базовия класprotectedв производния клас. - private наследяване прави
publicиprotectedчленове на базовия класprivateв производен клас.
Забележка: private членовете на базовия клас са недостъпни за производния клас.
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 )
Пример 1: C ++ публично наследяване
// 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; )
Изход
Частно = 1 Защитено = 2 Обществено = 3
Тук сме извлекли PublicDerivedот Baseв публичен режим .
В резултат на това в PublicDerived:
- prot се наследява като защитен .
- кръчма и
getPVT()се наследяват като публични . - pvt е недостъпен, тъй като е частен в
Base.
Тъй като частните и защитените членове не са достъпни, трябва да създадем публични функции getPVT()и getProt()да имаме достъп до тях:
// Error: member "Base::pvt" is inaccessible cout << "Private = " << object1.pvt; // Error: member "Base::prot" is inaccessible cout << "Protected = " << object1.prot;
Достъпност в публичното наследство
| Достъпност | частни членове | защитени членове | публични членове |
|---|---|---|---|
| Базов клас | Да | Да | Да |
| Производен клас | Не | Да | Да |
Пример 2: 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; )
Изход
Частен не може да бъде достъпен. Защитено = 2 Публично = 3
Тук сме извлекли ProtectedDerivedот Baseв защитен режим .
В резултат на това в ProtectedDerived:
- prot, pub и
getPVT()се наследяват като защитени . pvtе недостъпен, тъй като е частен вBase.
Както знаем, защитените членове не могат да бъдат директно достъпни.
В резултат на това не можем да използваме getPVT()от ProtectedDerived. Ето защо трябва да създадем getPub()функцията, ProtectedDerivedза да имаме достъп до променливата pub.
// Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;
Достъпност при защитено наследство
| Достъпност | частни членове | защитени членове | публични членове |
|---|---|---|---|
| Базов клас | Да | Да | Да |
| Производен клас | Не | Да | Да (наследено като защитени променливи) |
Пример 3: Частно наследяване на C ++
// 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; )
Изход
Частен не може да бъде достъпен. Защитено = 2 Публично = 3
Тук сме извлекли PrivateDerivedот Baseв частен режим .
В резултат на това в PrivateDerived:
- prot
pubиgetPVT()се наследяват като частни . - pvt е недостъпен, тъй като е частен в
Base.
Както знаем, частните членове не могат да бъдат директно достъпни.
В резултат на това не можем да използваме getPVT()от PrivateDerived. Ето защо трябва да създадем getPub()функцията, PrivateDerivedза да имаме достъп до променливата pub.
// Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;
Достъпност в частно наследство
| Достъпност | частни членове | защитени членове | публични членове |
|---|---|---|---|
| Базов клас | Да | Да | Да |
| Производен клас | Не | Да (наследено като частни променливи) | Да (наследено като частни променливи) |








