Застосування модифікаторів доступу private, protected, public при успадкуванні класів
Перед вивченням даної теми рекомендується ознайомитись з наступною темою:
Зміст
- 1. Особливості застосування модифікаторів доступу при успадкуванні класів
- 2. Модифікатор доступу private для базового класу.
- 3. Модифікатор доступу protected
- 4. Модифікатор доступу public
- Зв’язані теми
Пошук на інших ресурсах:
1. Особливості застосування модифікаторів доступу при успадкуванні класів
У мові C++ модифікатори доступу private, protected, public можуть застосовуватись до базових класів при їх успадкуванні похідними класами. Дія того чи іншого модифікатора впливає на рівень доступності елементів базових класів і проявляється у двох випадках:
- коли класи утворюють ієрархію успадкування;
- коли створюються екземпляри успадкованих класів.
Загальна форма задавання рівня доступу до базового класу наступна:
class DerivedClass : [access_modifier] BaseClass { // ... };
тут
- BaseClass – базовий клас;
- DerivedClass – похідний клас;
- access_modifier – один з модифікаторів доступу private, protected, public. Модифікатор доступу може бути відсутній, у цьому випадку за замовчуванням приймається private-доступ.
⇑
2. Модифікатор доступу private для базового класу
2.1. Обмеження доступу для успадкованих класів
Якщо клас B є похідним від базового класу A і базовий клас A містить модифікатор доступу private, то діють наступні правила видимості:
- усі private-елементи класу A є недоступні в класі B;
- усі protected-елементи класу A є видимі в класі B;
- усі public-елементи класу A є видимі в класі B;
- усі класи, що є успадкованими від класу B не будуть мати доступ до елементів класу A (рисунок 1).
Рисунок 1. Модифікатор доступу private для класу. Обмеження доступу для класу C в ієрархії класів
Як видно з рисунку 1 з класу B можна доступитись до protected та public елементів класу A. Однак для класу C клас A є повністю закритим (обмеження модифікатора private). Якщо з класу C будуть успадковані інші класи (D, E і т.д.), то клас A для цих класів також буде закритим.
⇑
2.2. Обмеження доступу для екземплярів (об’єктів) успадкованих класів
Якщо класи A, B утворюють ієрархію успадкування і клас A є базовим для класу B, то діють наступні правила стосовно екземплярів цих класів:
- з екземпляру класу A є доступними тільки public-елементи (члени даних, методи);
- з екземпляру класу B не є доступними будь-які елементи класу A. Тут спрацьовує обмеження модифікатора private перед іменем класу A (рисунок 2).
Рисунок 2. Модифікатор доступу private для класу. Немає доступу до елементу базового класу A з екземпляру похідного класу B
Як видно з рисунку 2, будь-які елементи private-базового класу A є закритими для екземплярів успадкованого класу B.
⇑
3. Модифікатор доступу protected
Модифікатор доступу protected обмежує доступ з екземплярів успадкованих класів та не обмежує доступ з методів успадкованих класів. Якщо два класи A, B утворюють ієрархію успадкування, і клас A оголошено базовим з модифікатором protected, то діють наступні правила:
- усі protected– та public-елементи класу A є доступними з методів класу B (рисунок 3);
- усі protected– та public-елементи класу A є доступними з методів класу, що успадкований від класу B (класу C);
- немає доступу до будь-якого елементу класу A з екземплярів похідних класів (рисунок 4).
Рисунок 3. Модифікатор protected для класу. Елементи базового класу, які оголошені як protected або public, є доступні з методів успадкованого класу
Рисунок 4. Модифікатор доступу protected для класу. Немає доступу до членів базового класу A з екземплярів будь-яких успадкованих класів (B, C, D, і т.д.)
Як видно з рисунку 4, члени класу A є закритими для екземплярів похідних класів B та C.
⇑
4. Модифікатор доступу public
Якщо в імені базового класу використовується модифікатор доступу public, то діють наступні правила:
- protected та public-члени базового класу доступні з методів успадкованого класу;
- private-члени базового класу недоступні з методів успадкованого класу;
- public-члени базового класу доступні з екземплярів успадкованого класу;
- private та protected-члени базового класу недоступні з екземплярів успадкованого класу.
Рисунок 5 демонструє вищевказані правила.
Рисунок 5. Модифікатор доступу public для успадкованого класу
⇑
Зв’язані теми
⇑