Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Не підтверджено.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
3.08 Mб
Скачать

Int d; // Захищений public:

int f; // Відкритий void Set(int a) {c = a;} int PutQ {return c;}

};

// Успадковуємо клас baseClass як protected-клас.

class derived: protected baseClass {

public:

void setJ(int a) {d = a;} // d - тут protected-член void setF(int a) {f = a;} // f - тут protected-член int getJ() {return d;} int getK() {return f;}

};

Int mainO

derived ObjD; // Створення об'єкта класу

І* Наступний рядок неправомірний, оскільки функція Set() є

Protected-членом класу derived, що робить його недоступним за його межами. */

ObjD.Set(IO);

cout« ObjD.PutO; // Неправильно, оскільки функція Put() -- protected-член.

ObjD.f =10; // Неправильно, оскільки змінна f- protected-член

// Наступні настанови правомірні.

ObjD.setF(IO);

cout« ObjD.getK() «"";

ObjD.setJ(12);

cout« ObjD.getJO «"";

getchQ; return 0;

Як зазначено у коментарях до цієї програми, члени (класу baseClass) f, d, Set() і PutO стають protected-членами класу derived. Це означає, що до них не можна отри­мати доступу з коду програми, "прописаного" поза класом derived. Тому посилання на ці члени у функції main() (через об'єкт ObjD) неправомірні.

  1. Узагальнення інформації про використання специфікаторів доступу public, protected і private

Оскільки права доступу, що визначаються специфікаторами доступу public, protected і private, є принциповими для створення програм мовою C++, то є сенс узагальнити все те, що було сказано про ці ключові слова.

Оголошення членів класу:

  • у випадку оголошення члена класу відкритим (з використанням ключового слова public), то до нього можна отримати доступ з будь-якої іншої частини програми;

  • якщо член класу оголошується закритим (за допомогою специфікатора доступу pri­vate), то до нього можуть отримувати доступ тільки члени того ж самого класу. По­над це, до закритих членів базового класу не мають доступу навіть похідні класи;

  • якщо член класу оголошується захищеним (тобто protected-членом), то до нього мо­жуть отримувати доступ тільки члени того ж самого класу або похідних від нього. Специфікатор доступу protected дає змогу успадковувати члени, але залишає їх зак­ритими у межах ієрархії класів.

Успадкування базових класів:

  • якщо базовий клас успадковується з використанням ключового слова public, то його public-члени стають public-членами похідного класу, а його protected-члени - protec­ted-членами похідного класу;

  • якщо базовий клас успадковується з використанням ключового слова private, то його public- і protected-члени стають private-членами похідного класу;

  • якщо базовий клас успадковується з використанням специфікатора доступу protec­ted, то його public- і protected-члени стають protected-членами похідного класу;

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

У міру збільшення досвіду створення програм мовою C++ застосування спе­цифікаторів доступу public, protected і private не завдаватиме Вам клопоту. А поки що, коли Вам ще не вистачає упевненості у правильності використання того або іншого специфікатора доступу, спробуйте написати просту експериментальну програму і проаналізуйте отримані результати.

  1. Механізми успадкування декількох базових класів

Похідний клас може успадковувати два або більше базових класів. Наприк­лад, у цій короткій програмі клас derived успадковує обидва класи baseA і baseB.

Код програми 5.8. Демонстрація механізму успадкування декількох базових класів

#include <vcl>

#include <iostream> // Для потокового введення-виведення

#include <conio> // Для консольного режиму роботи

using namespace std; // Використання стандартного простору імен

class baseA { // Оголошення базового класу protected: int х; public: