МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ
Національний університет “Львівська політехніка”
І Н С Т Р У К Ц І Я
до лабораторноі работи № 4
Реалізація ієрархії в мові С++. Множинне успадкування.
з курсу "Методи та засоби об’єктно-орієнтованого проектування "
для студентів
спеціальності 7.080402 - "Інформаційні технології пректування"
ЗАТВЕРДЖЕНО:
на засіданні кафедри САПР
Протокол № 14 від 3.04.1997 р.
Львів -2001
1. МЕТА РОБОТИ
Мета даної роботи є ознайомлення із принципами множинного успадкування.
2. ТЕОРЕТИЧНА ЧАСТИНА
Ієрархію простого успадкування можна описати, використовуючи структуру дерева, де кожен вузол - це підклас, який може породжувати довільну кількість додаткових підкласів. Як і у випадку простого успадкування, визначення private, protected i public в батьківському класі можна використовувати для управління доступом до екземплярів змінних і методів, які успадковані похідним класом (підкласом) від базового (батьківського) класу.
Крім того, специфікатори public - або private - похідного класу, як і при простому успадкуванні, визначають кожні класи, об’єкти яких мають прямий доступ до відкритих даних або функцій-членів базового класу.
Множинне успадкування реалізовано у версіях С++, починаючи з 2.0.
Підклас може успадковувати протокол одного або більше батьківських класів. При цьому, помимо специфікаторів public- і private- похідних класів використовується додаткова опція virtual.
Приклад опису класів при множинному успадкуванні:
class X1
{private:
d1;
m1;
protected
d2;
m2;
public:
d3;
m3;
};
class X2
{private:
d4;
m4;
protected
d5;
m5;
public:
d6;
m6;
};
class Z: public X1 , public X2
{private:
zd1;
zm1;
protected
zd2;
zm2;
private:
zd3;
zm3;
};
Похідний клас в ієрархії множинного успадкування не має доступу до захищених екземплярів змінних любих його базових класів.
При використанні множинного успадкування , в протокол похідного класу необхідно викликати конструктори базових класів для ініціалізації полів даних та ініціалізувати різні елементи об’єктів.
Порядок виклику конструкторів:
Ініціалізація здійснюється в порядку, визначеному ініціалізуючим списком з тим обмеженням, що конструктори базових класів завжди викликаються перед конструктором полів даних.
Void - конструктори базових класів, які явно не вказані в списку ініціалізації, викликаються після конструкторів, явно ініціалізованих базових класів, в цьому порядку, в якому вони йдуть в оголошенні класу. Але void - конструктори викликаються перед любим конструктором полів даних.
Для опису ієрархії множинного успадкування можна використати прямий ациклічний граф (ПАГ) (рис.1).
Parent
Child1 Child2
GrandChild
Рис.1. ПАГ множинного успадкування
В такому графі клас може з’явитись більше, ніж один раз. Розглянемо ПАГ множинного успадкування, представлений на рис.1. Елементи даних (екземпляри змінних) класу Parent з‘являються двічі в класі GrandChied. Перший набір успадковується через Chid1, другий через Chid2. Таке успадкування буває небажаним. Віртуальні базові класи [3,4,5] забезпечують механізм для уникнення дублювання елементів в класі, такому як GrandChied.
4. ЛАБОРАТОРНЕ ЗАВДАННЯ
Одержати індивідуальне завдання.
Із похідних класів, отриманих у лаб.роботі №3, шляхом множинного успадкування, утворити новий клас. Для об’єктів даного класу показати всі можливі механізми доступу до протоколів базових класів.
5. ЗМІСТ ЗВІТУ
Мета роботи.
Короткий опис особливостей множинного успадкування в С++.
Індивідуальне завдання.
Текст програми на С++.
Результати виконання програми.
Аналіз результатів, висновки.
6. СПИСОК ЛІТЕРАТУРИ
Касаткин А.И., Вальвачев А.Н. Профессиональное програмирование на языке Си: От Turbo к Borland C++:Справ. пособие; Под общ. ред. А..И.Касаткина. - Мн.:Выш.шк. -1992
Бьярн Страуструп Язык програмирования С++ Т.1,:Киев “ДиаСофт”. -1993
Ричард Вайнер, Люис Пинсон С++ изнутри. -Киев: Диасофт. -1993.
Стефан Дьюхарст, Кэти Старк Программирование на С++. -Киев: Диасофт. -1993.
Скляров В.А. Язык С++ и обьектно-ориентированное программирование. -Мн.: Высш.шк. -1997.