Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторні роботи по програмуванні(14 лаб).doc
Скачиваний:
78
Добавлен:
16.05.2015
Размер:
1.43 Mб
Скачать

Теоретичні відомості Принципи спадкування в ооп

Просте спадкування

Просте спадкування описує споріднення між двома класами, один у якого успадковує другий.

Клас, що знаходиться на вершині ієрархії, називається базовим класом

Інші класи називаються похідними класами.

Рисунок 4 -

Правила спадкування

1. З одного базового класу можуть створюватися багато класів, залишаючись різновидом простого спадкування

Рисунок 5 -

2. Похідний клас і сам може бути базовим, котрий успадковує інші класи.

Рисунок 6 -

3. Похідний клас і сам може бути базовим, котрий успадковують інші класи. Незважаючи на очевидну складність ієрархії класів (див. мал.), усі продемонстровані взаємозв'язки використовують просте спадкування, тому що кожен похідний клас має лише одного батька. Не існує яких-небудь обмежень на число класів, що успадковують один одного.

4. Похідний клас успадковує з базового дані-члени і функції-члени, але не конструктори і деструктори.

Наприклад, на малюнку 3 похідний клас А успадковує властивості базового класу; похідний клас В успадковує крім цих і нові властивості класу А; похідний клас С успадковує властивості верхнього базового класу і похідних класів А і В.

То похідний клас починає своє існування з копіювання членів базового класу, включаючи всі члени, успадковані з більш далеких.

Оголошення похідних класів

Розглянемо базовий клас CBase:

Class CBase

{

Private:

int count;//Закриті дані класу

Public:

CBase ();{count=0;}

void Set Count(int n){count=n;}// Конструктор

int Get Count (void) {return count;}

};

Член count відноситься до закритих даних класу. Тільки функції-члени CBase можуть безпосередньо посилатися на count. Конструктор CBase() ініціалізує count нульовим значенням; функція-член Set Count() привласнить count нове значення. Функція-член Get Count() повертає поточне значення count. Для спрощення коду конструктор CBase і обидві функції виконані як вбудовані.

Створимо новий клас похідний CDerіved, що має усі властивості CBase, але крім того, здатний збільшувати і зменшувати значення об'єкта на задану величину.

Формат заголовку похідного класу:

Class ім’я похідного класу : специфікатор доступу ім’я базового класу

{

тіло класу

};

Наприклад для похідного класу CDerived заголовок буде мати вигляд:

Class CDerived: public CBase

{

public:

CDerived():CBase (){}

void Change Count(int n) {Set Count(Get Count()+n); }

};

Клас CDerіved - похідний.

  1. У даному прикладі відкриті члени відкритого класу CBase залишаються відкритими в похідному класі. CDerіved

  2. До закритих членів класу CBase у CDerіved не можна одержати доступ.

  3. Похідні класи повинні викликати конструктори своїх базових класів. У даному прикладі конструктор не робить ніяких дій, тому не містить операторів.

Рисунок 7 - Приклади специфікаторів доступу

Class:

{

public:

CDerived():CBase(){}

………………………….

};

Конструктор за замовчуванням для похідного класу.

Конструктори похідного класу

Основні правила для створення конструкторів:

  1. У похідному класі є конструктор, якщо він є в базовому;

  2. Конструктор похідного класу повинний викликати конструктор базового класу. Наприклад, CDerіved():CBase() {}

  3. При виклику імені конструктора базового класу йде після імені конструктора похідного класу.

  4. Конструктор похідного класу може містити операторы:

CDerіved():CBase(){count <<"Іnіutіalіzed"}

  1. Конструктор похідного класу може бути описаний за межами класу.

Наприклад,

У класі class CDerіved: publіc CBase

{

publіc:

CDerіved ();

voіd Change Count (іnt n){Set Count (Get Count()+n); }

};

ім'я класу ім'я конструктора

CDerіved::CDerіved (); // заголовок конструктора

: CBase // виклик конструктора базового класу

{

оператори конструктора

}

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