Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Ключі доступу

Читайте также:
  1. Програмований контролер прямого доступу до пам'яті (ПДП) - мікросхема КР580ВТ57

При описі класу в його заголовку перелічуються всі класи, що є для нього базовими. Можливість звертання до елементів цих класів регулюється за допомогою ключів доступу private, protected і public:

class ім'я: [private | protected | public] базовий_клас

{ тіло класу };

Якщо базових класів не багато, вони перелічуються через кому. Ключ доступу може стояти перед кожним класом, наприклад:

class A {... };

class В {...};

class С {... };

class D: A. protected В, public С {...};

За замовчуванням для класів використовується ключ доступу private, а для структур — public.

Щоб зрозуміти, як один клас може успадковувати інші, розглянемо приклад, що, незважаючи на свою простоту, ілюструє кілька ключових положень спадкування.

Для початку оголошення базового класу:

// Завдання базового класу

class В {

int i;

public:

void set_i(int n);

int get_і();

};

Тепер похідний клас, що успадковує цей базовий:

// Завдання похідного класу

class D:public В {

int j;

public:

void set_j(int n);

int mul();

};

Зверніть увагу, що в оголошенні після імені класу D є двокрапка, за яким рзташовано ключове слово public і ім'я класу В. Для компілятора це вказівка, що клас D буде успадковувати усі компоненти класу В. Саме ключове словоpublic інформує компілятор про те, що, оскільки В буде успадковуватися, значить усі відкриті елементи базового класу будуть також відкритими елементами похідного класу. Однак усі закриті елементи базового класу залишаються закритими, і до них немає прямого доступу з похідного класу. Нижче приводиться закінчена програма, у якій використовуються класи ВиD:

// Простий приклад спадкування.

#include <iostream.h>

// Завдання базового класу

class base {

int i;

public:

void set_i(int n);

int get_i();

};

// Завдання похідного класу

class derived:public base {

int j;

public:

void set_j(int n);

int mul();

};

// Установка значення і у базовому класі

void base::set_і(int n)

{

i=n;

}

// Повернення значення і у базовому класі

int base::get_i()

{

return i;

}

// Установка значення j у похідному класі

void derived::set_j(int n)

{

j = n;

}

// Повернення значення і з base та, одночасно, j з derived

int derived::mul()

{

// похідний клас може викликати функції-члени базового класу

return j*get i();

}

main ()

{

derived ob;

ob.set_і(10); // завантаження і у base

ob.set_j(4); // завантаження j у derived

cout «ob.mul(); // друк числа 40

return 0;

}

Зверніть увагу на визначенняmul(). Відзначте, що функціяget_i(), що є членом базового класуВ, а не похідногоD, викликається усередині класуD, без якого б не було зв'язку з яким-небудь об'єктом. Це можливо тому, що відкриті члени В стають відкритими членами D. У функціїmul(), замість прямого доступу доi, необхідно викликати get_i() через те, що закриті члени базового класу (у даному випадку i) залишаються закритими для неї і недоступними для будь-якого похідного класу. Причина, по якій закриті члени класу стають недоступними для похідних класів - підтримка інкапсуляції. Якби закриті члени класу ставали відкритими просто за допомогою спадкування класу, інкапсуляція була б зовсім неможливою. Тут показана загальна форма спадкування базового класу:


Дата добавления: 2015-07-20; просмотров: 49 | Нарушение авторских прав


Читайте в этой же книге: ЗАВДАННЯ ПО ОБРОБЦІ РЯДКІВ | Директиви препроцесора. | If, #else, #elif, #endif. | Визначені макроси. | КОНТРОЛЬНІ ПИТАННЯ | Особливості типу char | Рекомендації зо вибору імен змінних і функцій | ТЕОРЕТИЧНА ЧАСТИНА | Функції для роботи з рядками | Робота з файлами |
<== предыдущая страница | следующая страница ==>
Запам'ятайте!| Просте спадкування

mybiblioteka.su - 2015-2024 год. (0.007 сек.)