Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка2011(12 лаб)_декабрь.doc
Скачиваний:
4
Добавлен:
26.08.2019
Размер:
1.1 Mб
Скачать

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

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

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

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

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

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

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

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

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. Похідні класи повинні викликати конструктори своїх базових класів. У даному прикладі конструктор не робить ніяких дій, тому не містить операторів.

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

Class:

{

public:

CDerived():CBase(){}

………………………….

};

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