Побудова множинного наслідування класів




Скачати 54.12 Kb.
НазваПобудова множинного наслідування класів
Дата конвертації14.09.2013
Розмір54.12 Kb.
ТипДокументы
skaz.com.ua > Фізика > Документы
Лабораторна робота № 5.

Побудова множинного наслідування класів

Мета: навчитися організовувати класи та похідні класи з своїми даними та властивостями: визначати структуру класу, типи даних та методів, організовувати необхідні конструктори та деструктори, використовувати специфікатори доступу; будувати ієрархію класів, використовуючи множинне наслідування; визначати та оперувати об’єктами цих класів; отримати практичні вміння та навички проектування та побудови ієрархії класів.

Обладнання: ПК, програмне забезпечення BorlandC++, методичні вказівки та завдання до лабораторної роботи.

^ Короткі теоретичні зведення

Принципи множинного наслідування. В С++ клас може мати не лише один батьківський клас. Якщо характеристики наслідуються від декількох батьківських класів, то говорять про множинне наслідування. Визначальним для похідного класу породженого множинним наслідуванням є те, що він явно чи неявно повинен успадковувати характеристики декількох базових класів. Неявним множинним наслідуванням можуть бути випадки змішаного наслідування. Як приклад приведемо ситуацію, коли похідний клас породжений від проміжного (просте наслідування), який, у свою чергу, породжений від двох базових (множинне наслідування). Результатом цих наслідувань є ієрархія, в якій похідний клас неявно (через один проміжний) успадкував характеристики двох базових класів.

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

class : [<модифікатор>] , ..., [<модифікатор>] { <тіло класу> };

Наприклад

class A { <тіло класу A> };

class B { <тіло класу B> };

class C : public A, B { }; // клас C породжений від A i B

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

Приклад

#include

output (char* c) { std::cout<
class A { public:

show () { output ("Клас A "); }

};

class B { public:

show () { output("Клас B "); }

};

class C : public A, public B // клас C породжений від A i B

{

public:

void show () { A::show (); B::show (); output ("Клас C"); }

};

main()

{ C c;

c.show ();

}

В наведеній програмі використана технологія перевизначення функцій при наслідуванні. Як метод доступу до функцій-членів перевизначених в множинній ієрархії використано ОДД з іменем класу.

^ Констуктори та деструктори при множинному наслідуванні. Виклики і виконання конструкторів та деструкторів при множинному наслідуванні є подібними до випадку одинарного наслідування. Якщо множинне наслідування розглядати як суму простих в порядку декларацій батьківських класів в оголошенні похідного класу, то легко зрозуміти черговість виклику і виконання функцій побудови і знищення об'єктів похідного класу.

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

Порядок виклику деструкторів є таким як у конструкторів, а виконання – зворотнім. Найпершим почне виконуватись деструктор похідного класу, а далі – деструктори вітки породженої останнім в оголошенні батьківським класом. У порядку зворотньому до декларації батьківських класів відпрацють деструктори класів усіх віток від них породжених. Лише по закінченню роботи і закритття батьківських деструкторів закриється деструктор похідного класу. Порядок роботи конструкторів та деструкторів ілюструє наступний приклад.

Приклад

#include

using namespace std;

Show (const char* mes, const char a=' ') { cout<
const char* mes_cosntr = "Конструктор класу";

const char* mes_destr = "Деструктор класу";

class D { public:

char d_pub;

D () { // виконується першим

Show ("Порядок виконання конструкторів");

d_pub = 'D'; Show (mes_cosntr,d_pub);

}

~D() { Show (mes_destr, d_pub); } // виконується останнім

};

class A : public D { public:

char a_pub;

A (char c) { a_pub = c; Show (mes_cosntr, a_pub); }

~A() { Show (mes_destr,a_pub); }

};

class B { public:

char b_pub;

~B() { Show (mes_destr,b_pub); }

B (char c) { b_pub = c; Show (mes_cosntr, b_pub); }

};

class C : public A, public B { public:

char c_pub;

C (char c1, char c2, char c3 ) : B ( c2 ), A ( c3 )

{ // виконується останнім

c_pub = c1; Show (mes_cosntr, c_pub);

}

~C() // виконується першим

{ Show("Порядок виконання деструкторів");

Show(mes_destr,c_pub);

}

};

Show (C c) { cout<<"\n"; }

main()

{ C* c = new C ('C', 'B', 'A');

Show (*c);

delete c;

}

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

C :: C (char c1, char c2, char c3) : B (c2), A(c3) { c_pub=c1; Show (mes_cosntr, c_pub); }

аргументи с2 і с3 передаються конструкторам базового класу В і проміжного класу А відповідно. Порядок передавання аргументів конструкторам в оголошенні конструктора похідного класу може бути довільним, оскільки виклики і виконання конструкторів визначаються порядком наслідування в оголошенні класу.

Як у випадку простого наслідування при визначенні конструктора можна передавати аргументи лише конструкторам вищих сусідніх класів. Конструктором класів, які не є сусідніми в ієрархії, аргументи передаються лише через визначення конструкторів проміжних класів. Наприклад, наступне визначення конструктора є неправильним

C :: C (char c1, char c2, char c3) : B (c2), A(c3), D()

{ c_pub=c1; Show (mes_cosntr, c_pub); }

^ Завдання до лабораторної роботи № 5

Необхідно побудувати ієрархію класів що відповідає схемі наслідування, наведеній у варіанті завдання. Кожен клас повинен містити конструктор-ініціалізатор, і функцію show() для виведення значень. Функція main() повинна ілюструвати ієрархію наслідування.

Варіант 1.

Варіант 2.

Варіант 3.







Варіант 4.

Варіант 5.

Варіант 6.







Варіант 7.

Варіант 8.

Варіант 9.







Варіант 10.

Варіант 11.

Варіант 12.







Контрольні питання

  1. Що таке успадкування?

  2. Описати правила доступу для різних типів успадкування.

  3. Чим відрізняються два види ієрархії? Навести приклади із свого варіанта.

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

  5. Що таке статичні члени класу і в яких випадках їх зручно використовувати?

Схожі:

Побудова множинного наслідування класів iconПобудова ієрархії класів
Мета: навчитися організовувати класи та абстрактні класи з своїми даними та властивостями; будувати ієрархію класів; визначати та...
Побудова множинного наслідування класів iconТема: комунікаційна діяльність І спілкування
Наслідування може бути довільним І мимовільним (несвідомим). Довільне наслідування (імітація) використовується в шкільному навчанні,...
Побудова множинного наслідування класів iconПлан заняття Побудова 3-х мірних моделей правильних багатогранників...
Вправа №2. Побудова 3-х мірної моделі правильної й неправильної 4-х гранної пірамід
Побудова множинного наслідування класів iconТема. Проектування класів та їх методів
Мета роботи: засвоїти поняття конструктора, деструктора та функцій-членів класів
Побудова множинного наслідування класів iconПрограма зовнішнього незалежного оцінювання Пояснювальна записка
Зно) розроблено з урахуванням чинних програм з української мови для 5–9 класів (лист Міністерства освіти І науки України №1/11-6611...
Побудова множинного наслідування класів iconПрограма зовнішнього незалежного оцінювання 2013 року Пояснювальна записка
Зно) розроблено з урахуванням чинних програм зі світової літератури для 5–9 класів (лист Міністерства освіти І науки України №1/11-6611...
Побудова множинного наслідування класів iconПрограма зовнішнього незалежного оцінювання 2013 року Пояснювальна записка
Зно) розроблено з урахуванням чинних програм зі світової літератури для 5–9 класів (лист Міністерства освіти І науки України №1/11-6611...
Побудова множинного наслідування класів iconПрограма виховної роботи з учнями 1-4 класів Моргачова Людмила Дмитрівна,...
Крім того, традиційними стали телепередачі та статті в пресі, що очорнюють нашу історію та людей, які були учасниками тих чи інших...
Побудова множинного наслідування класів iconПрограма зовнішнього незалежного оцінювання 2012 року Пояснювальна записка
Зно) розроблено з урахуванням чинних програм з української мови для 5–9 класів (лист Міністерства освіти І науки України №1/11-6611...
Побудова множинного наслідування класів iconПрограма зовнішнього незалежного оцінювання 2012 року Пояснювальна записка
Зно) розроблено з урахуванням чинних програм з української мови для 5–9 класів (лист Міністерства освіти І науки України №1/11-6611...
Додайте кнопку на своєму сайті:
Школьные материалы


База даних захищена авторським правом © 2015
звернутися до адміністрації
skaz.com.ua
Головна сторінка