Студопедия
Новини освіти і науки:
МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах


РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання


ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ"


ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ


Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків


Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні


Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах


Гендерна антидискримінаційна експертиза може зробити нас моральними рабами


ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ


ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів



Контакти
 


Тлумачний словник
Авто
Автоматизація
Архітектура
Астрономія
Аудит
Біологія
Будівництво
Бухгалтерія
Винахідництво
Виробництво
Військова справа
Генетика
Географія
Геологія
Господарство
Держава
Дім
Екологія
Економетрика
Економіка
Електроніка
Журналістика та ЗМІ
Зв'язок
Іноземні мови
Інформатика
Історія
Комп'ютери
Креслення
Кулінарія
Культура
Лексикологія
Література
Логіка
Маркетинг
Математика
Машинобудування
Медицина
Менеджмент
Метали і Зварювання
Механіка
Мистецтво
Музика
Населення
Освіта
Охорона безпеки життя
Охорона Праці
Педагогіка
Політика
Право
Програмування
Промисловість
Психологія
Радіо
Регилия
Соціологія
Спорт
Стандартизація
Технології
Торгівля
Туризм
Фізика
Фізіологія
Філософія
Фінанси
Хімія
Юриспунденкция






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

При описі класу в його заголовку перелічуються всі класи, що є для нього базовими. Можливість звертання до елементів цих класів регулюється за допомогою ключів доступу 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) залишаються закритими для неї і недоступними для будь-якого похідного класу. Причина, по якій закриті члени класу стають недоступними для похідних класів - підтримка інкапсуляції. Якби закриті члени класу ставали відкритими просто за допомогою спадкування класу, інкапсуляція була б зовсім неможливою. Тут показана загальна форма спадкування базового класу:

class ім'я_ похідного_ класу : специфікатор_доступу

ім'я_ базового_класу {

.

.

}

Тутспецифікатор _достуna — це одне з наступних трьох ключових слів: public (відкритий),private (закритий) абоprotected (захищений). У даному випадку для спадкування класу використовується самеpublic.

Дотепер ми розглядали тільки застосовувані до елементів класу специфікатори доступу private і рublіс. Для будь-якого елемента класу може також використовуватися специфікатор protected, котрий для одиночних класів, що не входять в ієрархію, рівносильний private. Різниця між ними виявляється при спадкуванні, це можна бачити з приведеної таблиці:

 

Ключ доступу Специфікатор у базовому класі Доступ у похідному класі
private private немає
  protected private
  public private
protected private немає
  protected protected
  public protected
public private немає
  protected protected
  public public

 

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

Елементи protected при спадкуванні з ключем private стають у похідному класі private, в інших випадках права доступу до них не змінюються.

Доступ до елементів рublіс при спадкуванні стає відповідним ключу доступу.

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

class Base{

...

public: void f();

};

class Derived : private Base{

...

public: Base::void f();

};




Переглядів: 1041

<== попередня сторінка | наступна сторінка ==>
ТЕОРЕТИЧНА ЧАСТИНА | Просте спадкування

Не знайшли потрібну інформацію? Скористайтесь пошуком google:

 

© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове.


Генерація сторінки за: 0.005 сек.