Class mist
{
void fl();
void f2();
};
Функції f1() і f2() є дружніми по відношенню до класу hero (хоча і описані без ключового слова friend) і мають доступ до всіх його полів. Оголошення friend не є специфікатором доступу і не успадковується.
Завдання
Даний розділ тісно пов’язаний з динамічними структурами даних де розглядаються вкладені класи. Варіанти завдань треба виконати з використанням вкладених класів.
РОЗДІЛ 3. СПАДКУВАННЯ КЛАСІВ
3.1 Спадкування класів
Механізм спадкування класів дозволяє будувати ієрархії, в яких похідні класи отримують елементи батьківських, або базових, класів і можуть доповнювати їх або змінювати їх властивості. При великій кількості ніяк не зв'язаних класів управляти ними стає неможливо. Спадкування дозволяє впоратися з цією проблемою шляхом впорядковування і ранжирування класів, тобто об'єднання загальних для декількох класів властивостей в одному класі і використання його як базового. Класи, що знаходяться ближче до початку ієрархії, об'єднують в собі найбільш загальні риси для всіх класів, що знаходяться нижче. У міру просування вниз за ієрархією класи набувають все більше конкретних рис. Множинне спадкування дозволяє одному класу володіти властивостями двох та більше батьківських класів.
При описі класу в його заголовку перераховуються всі класи, що є для нього базовими. Можливість звернення до елементів цих класів регулюється за допомогою ключів доступу private, protected і public:
class ім'я : [private | protected | public] базовий_клас
{ тіло класу };
Якщо базових класів декілька, вони перераховуються через кому. Ключ доступу може стояти перед кожним класом, наприклад:
class А { ... };
class В { ... };
class С { ... };
class D: А, protected В, public С { ... };
За умовчанням для класів використовується ключ доступу private, а для структур – public. До цих пір ми в основному розглядали специфікатори доступу private і public. Для будь-якого елементу класу може також використовуватися специфікатор protected, який для одиночних класів, що не входять в ієрархію, рівносильний private. Різниця між ними виявляється при спадкуванні, що можна бачити з приведеної таблиці:
Як видно з таблиці, private елементи базового класу в похідному класі недоступні незалежно від ключа. Звернення до них може здійснюватися тільки через методи базового класу. Елементи protected при спадкоємстві з ключем private стають в похідному класі private, в решті випадків права доступу до них не змінюються.
Ключ доступу | Специфікатор у базовому класі | Доступ в похідному класі |
private | private | немає |
protected | private | |
public | private | |
protected | private | немає |
protected | protected | |
public | protected | |
public | private | немає |
protected | protected | |
public | public |
Доступ до елементів public при спадкуванні стає відповідним ключу доступу. Якщо базовий клас успадковується з ключем private, можна вибірково зробити деякі його елементи доступними в похідному класі, оголосивши їх в секції public похідного класу за допомогою операції доступу до зони видимості:
Дата добавления: 2014-12-26; просмотров: 768;