У цьому посібнику ми навчимося використовувати загальнодоступне, захищене та приватне успадкування в 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у похідному класі. - приватне успадкування робить
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++ 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;
Доступність у приватному спадщині
| Доступність | приватні члени | захищені члени | громадські члени |
|---|---|---|---|
| Базовий клас | Так | Так | Так |
| Похідний клас | Ні | Так (успадковується як приватні змінні) | Так (успадковується як приватні змінні) |








