Всего на сайте:
236 тыс. 713 статей

Главная | Механика

PrivatePohid bPub;  Просмотрен 238

ProtectedPohid aPro;}

7.9.2. Правила доступу до полів даних

 

Залежно від специфікатора доступу, що використовується при утворенні похідного класу, змінюється тип доступу до полів базового. Для того, щоб сформулювати правила доступу, необхідно розрізняти доступи в протоколі опису класу й до полів екземпляра класу. Досі не було необхідності це робити, оскільки всі функції – члени класу мають вільний доступ до елементів протоколу свого класу. Тому специфікатори доступу впливали в наших прикладах лише на доступ до полів екземпляра класу. Тепер ми змушені окремо розглянути протокольний доступ (саме тут можемо виділити особливість специфікатора private).

Правила доступу до полів екземпляра похідного класу:

1. Члени відкритого базового класу в похідному класі зберігають свою специфікацію доступу.

2. Відкриті члени захищеного базового класу стають захищеними в похідному. Закриті й захищені члени зберігають свої попередні специфікації доступу.

3. Усі члени закритого базового класу стають закритими в похідному незалежно від попередньої специфікації доступу.

Якщо специфікатор доступу випущено, то вважається, що базовий клас закритий.

Правила доступу в протоколі:

1. У протоколі класу є вільний доступ до всіх його компонент, тобто будь-яка функція-член у будь-якому розділі опису класу має вільний доступ до будь-яких компонент протоколу класу.

2. Протокол будь-якого похідного класу (незалежно від того, який специфікатор доступу вказаний при його утворенні) має прямий доступ до відкритої і захищеної (protected) частини його базового класу.

3. Незважаючи на те, що похідні класи успадковують усі протоколи від базових, похідний клас не має прямого доступу до полів даних і функцій-членів, описаних у закритому розділі базового класу. У наведеному в підрозд.

7.9.1 прикладі класи PublicPohid PrivatePohid та ProtectedPohid успадковують data1 та function1 з базового класу, але не мають прямого доступу до них навіть у протоколі. Доступ можна забезпечити через функцію, визначену в захищеній чи відкритій частинах класу Base.

Як бачимо із сформульованих вище правил доступу, захищена частина класу – це дещо середнє між відкритою й закритою. Подібно до закритих членів, захищені члени доступні лише функціям-членам відкритого розділу класу. Екземпляр класу не має прямого доступу до своїх захищених даних. Подібно до відкритих, захищені члени успадковуються похідними класами й доступні в їх протоколах. Екземпляри похідних класів доступу до захищених даних базового класу не мають. У прикладі протоколи класів PublicDerived, PrivatePohid та ProtectedPohid мають прямий доступ до data2 та function2. У той самий час, об’єкти aPriv та aPub не мають прямого доступу до data2, function2 та своїх закритих і захищених розділів.

Похідні класи самі можуть стати базовими. І тут необхідно враховувати зміни статусу полів. Розглянемо приклад:

class Base{

protected: int x;

public: int y;//...};

class Tderived: private Base {

public:

Предыдущая статья:Void g(int a). {static Timer t(a);} Успадкування Успадкуванн.. Следующая статья:Void f(void). {x=3;//... y=4;}; У тілі функції f маємо прямий доступ до змінних x ..
page speed (0.0112 sec, direct)