Множинне спадкування

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Не вказано

Інформація про роботу

Рік:
2013
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Комп’ютерні системи

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ Національний університет “Львівська політехніка” Кафедра САП  Звіт до лабораторної роботи № 11 Множинне спадкування з курсу “Проблемно-орієнтоване програмування” для студентів спеціальності "Комп’ютерні системи проектування" Львів 2013 1. МЕТА РОБОТИ Метою даної роботи є ознайомлення з принципами множинного спадкування у обєктно-орієнтованій мові програмування C++. 2. ТЕОРЕТИЧНІ ВІДОМОСТІ Множинне спадкування Похідний клас може одночасно спадковувати властивості декількох базових класів. Конструктори, деструктори й спадкування У зв'язку зі спадкуванням виникають два питання, що стосуються конструкторів і деструкторів. По-перше, коли викликаються конструктори й деструктори базового й похідного класів? По-друге, як передаються параметри конструкторів базового класу? Відповіді на ці питання описано нижче. Коли викликаються конструктори й деструктори Базовий і похідний клас можуть містити декілька конструкторів і деструктор. Отже, дуже важливо правильно розуміти, у якому порядку вони викликаються при створенні й знищенні об'єктів похідного класу. При створенні об'єкта похідного класу спочатку викликається конструктор базового класу, а потім - похідного. При знищенні об'єкта похідного класу спочатку викликається деструктор похідного класу, а потім - базового. Інакше кажучи, конструктори викликаються в ієрархічному порядку, а деструктори - у зворотному. Це цілком природно. Оскільки базовий клас не має ніякої інформації про похідні класи, ініціалізація його об'єктів повинна виконуватися до ініціалізації будь-якого об'єкта похідного класу. Отже, конструктор базового класу повинен викликатися першим. Цілком очевидно, що деструктори повинні викликатися у зворотному порядку. Оскільки похідний клас успадковує властивості базового, знищення об'єкта базового класу викличе знищення об'єкта похідного класу. Отже, деструктор похідного класу повинен викликатися до повного знищення об'єкта. При ієрархічному спадкуванні (коли похідний клас стає базовим для свого спадкоємця) застосовується наступне правило: конструктори викликаються в ієрархічному порядку, а деструктори - у зворотному. Це правило застосовне й до множинного спадкування. Передача параметрів конструкторові базового класу Дотепер ми розглядали конструктори, що не мають аргументів. Якщо конструктор похідного класу повинен одержувати кілька параметрів, варто просто використовувати стандартну синтаксичну форму конструктора з параметрами. Однак виникає питання, яким чином передаються аргументи конструкторові базового класу? Для цього застосовується розширена форма оголошення конструктора похідного класу, що дозволяє передавати аргументи декільком конструкторам одного або декількох базових класів. Загальна форма цієї синтаксичної конструкції така. конструктор_похідного_класу (список_аргументів) : bаве1 (список_аргументів), bаsе2(список_аргументів), . . . bаseN(список_аргументів) { // Тіло конструктора похідного класу } Тут параметри base1 - baseN є іменами базових класів. Зверніть увагу на те, що оголошення конструктора похідного класу відділяється двокрапкою від специфікацій базових класів, які, у свою чергу, розділяються комами. Підкреслимо, що аргументи конструктора базового класу передаються за допомогою аргументів конструктора похідного класу. Отже, навіть якщо конструктор похідного класу не має власних аргументів, його оголошення повинне містити аргументи конструкторів базових класів. У цьому випадку аргументи, передані конструкторові похідного класу, просто переправляються конструкторам базових класів. Конструктор похідного класу може довільно використовувати всі параметри, зазначені в його оголошенні, навіть якщо вони передаються конструкторам базового класу. Інакше кажучи, передача параметрів конструкторам базових класів не виключає їхнього використання всередині похідного класу. Передаючи параметри конструкторам базових класів, варто мати на увазі, що як аргумент можуть використовуватися будь-які допустимі вирази, наприклад, виклики функцій або змінні. Це повністю узгоджується із принципом динамічної ініціалізації об'єктів, передбаченої в мові C++. Надання доступу Якщо до базового класу застосовується механізм закритого спадкування, всі його відкриті й захищені члени стають закритими членами похідного класу. Однак у деяких ситуаціях можна відновити вихідний статус одного або декількох успадкованих членів, які раніше були відкритими або захищеними. Наприклад, може виникнути необхідність зберегти відкритий доступ до деяких членів базового класу, незважаючи на те що вони успадковуються закритим похідним класом. Стандарт мови C++ передбачає для цього два шляхи. По-перше, можна застосувати оператор using. Цей спосіб більше кращий. Оператор using призначений для підтримки просторів імен. По-друге, можна використовувати оголошення рівня доступу (access declaration) у похідному класі. Цей спосіб також підтримується стандартом мови C++, однак вважається небажаним. Це значить, що в нових програмах його варто уникати. Однак, оскільки в практиці залишається велика кількість старих програм, розглянемо цей приклад докладніше. Оголошення рівня доступу виглядає в такий спосіб. базовий_клас :: член; Це оголошення розміщається всередині похідного класу після заголовка відповідного розділу. Зверніть увагу на те, що тип змінної в оголошенні рівня доступу вказувати не слід. class base { public: int j; // Відкритий член класу base } ; // Закритий спадкоємець класу base. class derived: private base { public: // Місце для оголошення рівня доступу. base::j; // Тепер змінна j знову відкрита. . . }; Оскільки клас derived є закритим спадкоємцем класу base, відкрита змінна-член j із класу base стає закритою змінною-членом класу derived. Тому у розділ public класу derived ми помістили оголошення рівня доступу. base::j; // Змінна j знову стала відкритою. Цей спосіб можна застосовувати для відновлення статусу відкритих і захищених членів. Однак з його допомогою не можна підняти або понизити рівень доступу до члена класу. Цей спосіб дозволяє відновлювати рівень доступу до деяких відкритих або захищених членів класу, залишаючи похідний клас закритим. ЗАВДАННЯ ДО ЛАБОРАТОРНОЇ РОБОТИ(1 варіант) 1. Описати два базових класи з захищеною змінною цілого типу. Описати в них функції виводу цієї змінної на екран. Використовуючи множинне наслідування, описати похідний клас з функцією задання двох змінних цілого типу. В головній функції main ініціалізувати присвоєння значень з допомогою функції з похідного класу, а вивід на екран – з допомогою функцій, які описані в базових класах. КОД ПРОГРАМИ #include <iostream> #include <string.h> using namespace std; class Base1 { protected: int a; public: void PrintA() { cout<<"a:= "<<a<<endl; } }; class Base2 { protected: int b; public: void PrintB() { cout<<"b:= "<<b<<endl; } }; class Derived: public Base1, public Base2 { public: void seta(int a) {this->a = a;} void setb(int b) {this->b = b;} }; int main(){ Derived D; int za; cout<<"Enter zmin A"<<endl; cin>>za; D.seta(za); int zb; cout<<"Enter zmin B"<<endl; cin>>zb; D.setb(zb); D.PrintA(); D.PrintB(); cin.get(); return 0;} РЕЗУЛЬТАТ ВИКОНАННЯ  ВИСНОВОК На основі лабораторної роботи я ознайомився з принципами множинного спадкування у обєктно-орієнтованій мові програмування C++.
Антиботан аватар за замовчуванням

29.09.2014 20:09-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!