Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекція №5 Просте та множинне наслідування .doc
Скачиваний:
4
Добавлен:
16.11.2019
Размер:
95.23 Кб
Скачать

8

Просте та множинне наслідування.

Мова C++ дозволяє класу наслідувати дані-члени й функції-члени одного або декількох інших класів. При цьому новий клас називають похідним класом (або класом-нащадком). Клас, елементи якого наслідуються, називається базовим класом (батьківським класом або класом предком) для свого похідного класу. Якщо в похідного класу зазначено один базовий клас, то це просте наслідування. Якщо в похідного класу є кілька базових класів, то говорять про множинне наслідування.

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

Похідні класи:

  1. успадковують дані-члени й функції-члени базового класу

  2. можуть додавати нові дані-члени й функції-члени;

  3. можуть видозмінювати деякі функції-члени базового класу.

Похідний клас не успадковує наступні члени базового класу:

  1. конструктори;

  2. деструктори;

  3. перевантажені оператори присвоєння;

  4. друзі класу.

Але найважливіший смысл наследования заключается не в том, что оно обеспечивает доступ к функциям базового класса. Наследование выражает связь между новым и базовым классами, и эта связь выражается так: «Новый класс является подтипом существующего класса». Например, базовый класс инструмент, представляющий музыкальный инструмент, и производный класс духовой инструмент.

Синтаксис оголошення похідного класу має такий вигляд:

class Basel // Базовий клас

{ <елементи_класу> } ;

class Base2 // Базовий клас

{ <елементи_класу> } ;

class Derived : <специфікатор_доступу> Basel, // Похідний клас

<специфікатор_доступу> Base2,

• • •

<специфікатор_доступу> Basen

{ <елементи_класу> } ;

Тут <специфікатор_доступу> –не є обов'язковим і за замовчуванням приймає значення private для класів і public для структур. Специфікатор доступу при наслідуванні визначає рівень доступу до елементів базового класу, який одержують елементи похідного класу. У наведеній нижче таблиці описані можливі варіанти наслідуваного доступу.

Доступ у базовому класі

public

protected

private

public

public

protected

недоступні

protected

protected

protected

недоступні

private

private

private

недоступні


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

Робота конструктора й деструктора

class Coord

{

public :

// базовий клас

Coord ( ) { cout <<"Constructor Coord \n"; }

~coord ( ) { cout <<"Destructor Coord \n"; }

}

class Dot : public Coord

{

public :

Dot ( ) { cout <<"Constructor Dot \n";}

~dot ( ){ cout <<"Destructor Dot \n";}

}

Void main ( )

{

Dot A ;

}

Результат роботи:

Constructor Coord

Constructor Dot

Destructor Dot

Destructor Coord

Хоча конструктор базового класу не успадковується, він автоматично викликається при створенні екземпляра похідного класу. Причому спочатку виконується конструктор базового класу, а потім - похідного. Єдина можливість передати аргументи конструкторам базового класу – використати список ініціалізації елементів

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