Залежно від специфікатора доступу, що використовується при утворенні похідного класу, змінюється тип доступу до полів базового. Для того, щоб сформулювати правила доступу, необхідно розрізняти доступи в протоколі опису класу й до полів екземпляра класу. Досі не було необхідності це робити, оскільки всі функції – члени класу мають вільний доступ до елементів протоколу свого класу. Тому специфікатори доступу впливали в наших прикладах лише на доступ до полів екземпляра класу. Тепер ми змушені окремо розглянути протокольний доступ (саме тут можемо виділити особливість специфікатора 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 f(void)
{x=3;//...
y=4;};
У тілі функції f маємо прямий доступ до змінних x та y, але, оскільки Base є закритим базовим класом, то статус цих змінних змінився на private. Нехай визначено ще один клас:
class Tdec:public Tderived {
public:
void g(void){}//...}
Тут уже функція g() не має доступу до змінних x та y.
Якщо ми хочемо отримати доступ до деяких закритих полів, то можна робити це через функції, описані у відкритому розділі. Аналогічно можемо діяти при визначенні похідних класів. Якщо в класі Base визначені відкриті функції для доступу до закритих полів, то вони успадковуються похідними класами й можуть використовуватися відкритими функціями похідних класів для доступу до відповідних полів (адже в протоколі похідного класу є доступ до відкритої частини будь-якого базового. Зазначимо, що в такій схемі неважливий специфікатор доступу при утворенні похідного класу.)
І ще одна обставина. Припустимо, що, оголошуючи клас B private -похідним від А, ми хочемо залишити відкритими окремі члени класу А. У такому випадку можна використати операцію розширення області видимості:
Class A
{
public:
int i;
}
Class B: private A
{//...
public:
A::i;};
Тоді змінна i матиме відкритий статус у класі В (ніби вона визначена у відкритому розділі класу В).






