Class A.
{
protected:
int val;
};
class B: public A
{
public:
void FB();
};
class C: public B
{
public:
void FC();
};
Рис. 1. Ієрархія класів.
Властивість захищеності поширюється по дереву доти, поки похідна класу повідомляє свій базовий клас загальнодоступним. При цьому будь-яка функція-член у класах С або В може одержати доступ до захищеного члена даних val базового класу А. Наприклад, цілком допустимий такий код:
void B::FB()
{
val = 0;
}
void C::FC()
{
val = 0;
}
Якщо функція-член приймає вказівку або посилання на інший об’єкт, то правила вже інші. Розглянемо модифікований клас С:
class C: public B
{
public:
void FC(A&);
};
void C::FC(A&a)
{
val = 0; //доступ дозволений
a.val = 0; /*тут використовується посилання A&:
порушення прав доступу, може бути використаний
загальнодоступний інтерфейс класу А.*/
}
Доступ до val через посилання на об’єкт класу А не дозволений, незважаючи на те, що функція розташована усередині класу, породженого від А, що має доступ до захищених членів класу.
Докладно про захищені члени класу буде розглянуто в розділі 3 "Спадкування класів". Можна створювати об’єкти класу або вказівку на об’єкти класу в основній або динамічній пам’яті.
Приклад:
Дата добавления: 2014-12-26; просмотров: 787;