МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах
РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ" ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах Гендерна антидискримінаційна експертиза може зробити нас моральними рабами ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів Контакти
Тлумачний словник |
|
|||||||||||||||||||||||||||||||||||||
Ключі доступуПри описі класу в його заголовку перелічуються всі класи, що є для нього базовими. Можливість звертання до елементів цих класів регулюється за допомогою ключів доступу 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 елементи базового класу в похідному класі недоступні поза залежністю від ключа. Звертання до них може здійснюватися тільки через методи базового класу. Елементи protected при спадкуванні з ключем private стають у похідному класі private, в інших випадках права доступу до них не змінюються. Доступ до елементів рublіс при спадкуванні стає відповідним ключу доступу. Якщо базовий клас успадковується з ключем private, можна вибірково зробити деякі його елементи доступними в похідному класі, оголосивши їх у секції public похідного класу за допомогою операції доступу до області видимості: class Base{ ... public: void f(); }; class Derived : private Base{ ... public: Base::void f(); };
|
||||||||||||||||||||||||||||||||||||||
|