Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Використання специфікатора доступу protected для успадкування базового класу



Специфікатор доступу protected можна використовувати не тільки для надання членам класу статусу "захищеності", але і для успадкування базового класу. Якщо базовий клас успадковується як захищений, то всі його відкриті та закриті члени стають захищеними членами похідного класу. Для розуміння сказаного розглянемо такий приклад.

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

#include <vcl>

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

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

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

class baseClass { // Оголошення базового класу

int c, d;

public:

void setB(int a, int b) { c = a; d = b; }

void showB(char *s)

{ cout << s << "c= " << c << "; d= " << d << endl; }

};

class derived : public baseClass {

int f;

public:

derived(int x) { f = x; }

void showF(char *b, char *p)

{ showB(b); cout << p << "f= " << f << endl; }

};

int main()

{

derived ObjD(3);

// Доступ до членів класу baseClass

ObjD.setB(1, 2);

// Доступ до членів класу baseClass

ObjD.showB("Базовий клас: "); cout << endl;

// Доступ до члена класу derived

ObjD.showF("Базовий клас: ", "Похідний клас: ");

getch(); return 0;

}

Внаслідок виконання ця програма відображає на екрані такі результати:

Базовий клас: c= 1; d= 2

Базовий клас: c= 1; d= 2

Похідний клас: f= 3

Оскільки функції setB() і showB() (члени класу baseClass) успадковані класом derived як public-члени, то їх можна викликати для об'єкта типу derived у функції main(). Позаяк члени даних c та d визначені як private-члени, то вони залишаються закритими у межах свого класу baseClass.

Протилежністю відкритому (public) успадкуванню є закрите (private).

Наприклад, наведений нижче код програми не відкомпілюється, оскільки обидві функції setB() і showB() тепер стали private-членами класу derived (тобто, доступними тільки для функцій-членів похідного класу), і тому їх не можна викликати з функції main().

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

#include <vcl>

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

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

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

Об'єктно-орієнтоване програмування мовою С++

122 Розділ 5. Організація механізмів успадкування в класах

class baseClass { // Оголошення базового класу

int c, d;

public:

void setB(int a, int b) { c = a; d = b; }

void showB(char *s) { cout << s << "c= " << c << "; d= " << d << endl; }

};

// Відкриті члени класу baseClass тепер стають закритими членами класу derived.

class derived : private baseClass {

int f;

public:

derived(int x) { f = x; }

void showF(char *b, char *p) { showB(b); cout << p << "f= " << f << endl; }

};

int main()

{

derived ObjD(3);

// Помилка, доступу до функції setB() немає.

ObjD.setB(1, 2);

// Помилка, доступу до функції showB() немає.

ObjD.showB("Базовий клас: "); cout << endl;

// Доступ до члена класу derived

ObjD.showF("Базовий клас: ", "Похідний клас: ");

getch(); return 0;

}

Як уже зазначалося вище, закриті члени базового класу не доступні ніяким іншим частинам програми, окрім функцій-членів свого класу, в т.ч. йдеться і про похідні класи. Проте із захищеними членами класу все відбувається інакше. Якщо базовий клас успадковується як public-клас, то захищені члени базового класу стають захищеними членами похідного класу, тобто доступними для нього. Отже, використовуючи специфікатор доступу protected, можна створити члени класу, які закриті у межах свого класу, але можуть успадковуватися похідним класом з отриманням доступу до себе. Для розуміння сказаного розглянемо такий приклад програми.


Поделиться:



Последнее изменение этой страницы: 2019-04-19; Просмотров: 264; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.013 с.)
Главная | Случайная страница | Обратная связь