Приклад рішення задачі
Див. проект «Task13».
Контрольні питання
Що таке оператор в C++?
Що таке функція в C++?
Що таке метод в C++?
Що означає сигнатура функції?
Як виконується перевантаження в C++?
Які є особливості перевантаження операторів?
Наведіть приклад перевантаження операторів у формі зовнішніх функцій.
Наведіть приклад перевантаження операторів у формі функції класу.
Що таке друзі в C++?
Наведіть приклад використання дружніх стосунків між класами.
Лабораторна робота №14
Мета: використання покажчиків на базовий клас для розміщення елементів в контейнері. Обробка елементів за допомогою віртуальних методів.
Індивідуальне завдання
При розробці проекту використовувати раніше обрану прикладну область та реалізовану функціональність.
Для обробки Об’єктів 2 і 3:
створити методи, які забезпечують збереження екземплярів у файлах (в окремому файлі кожний екземпляр) у текстовому вигляді;
забезпечити методи, які зчитують об’єкти з текстових файлів;
перевантажити оператори <, >, ==;
доповнити ієрархію власним класом-контейнером, продемонструвати його функціональність.
При розміщенні об’єктів в контейнерах, використовувати покажчик (посилання) на базовий клас.
Розширити ієрархію класом утиліт для обробки контейнерів динамічних об’єктів (введення, виведення, пошук та інше).
Термінологія
Поліморфізм (poly – багато, morphos – форма) – це властивість системи використовувати об’єкти з однаковим інтерфейсом без інформації про тип і внутрішню структуру об’єкта.
Віртуальний метод – це метод (функція) класу, який може бути перевизначений в класах-спадкоємцях так, що конкретна реалізація методу для виклику буде визначатися під час виконання. Користувачеві досить лише знати, що об’єкт належить класу або спадкоємцю класу, в якому метод оголошений. Віртуальні методи дозволяють створювати загальний код, який може працювати як з об’єктами базового класу, так і з об’єктами будь-якого його спадкоємця. При цьому базовий клас визначає спосіб роботи з об’єктами і будь-які його спадкоємці можуть надавати конкретну реалізацію цього способу.Базовий клас може і не надавати реалізації віртуального методу, а лише декларувати його існування. Такі методи без реалізації називаються «чистими віртуальними» (pure virtual) або абстрактними. Клас, який містить хоча б один такий метод, теж буде абстрактним. Об’єкт такого класу створити не можна. Спадкоємці абстрактного класу повинні надати реалізацію для всіх його абстрактних методів, інакше вони, в свою чергу, будуть абстрактними класами. Для кожного класу, що має хоча б один віртуальний метод, створюється таблиця віртуальних методів. Кожен об’єкт зберігає покажчик на таблицю свого класу. Для виклику віртуального методу з об’єкта береться покажчик на відповідну таблицю віртуальних методів, а з неї, за фіксованим зміщення покажчик на реалізацію методу, використовуваного для даного класу.
Деструктор зазвичай роблять віртуальним. Це дозволяє коректно видаляти об’єкти без витоків пам’яті, маючи лише покажчик на базовий клас.
Перевизначення (заміщення) методу (method overriding) – одна з можливостей, що дозволяє підкласу (спадкоємцю) забезпечувати специфічну реалізацію методу, вже реалізованого в одному з суперкласів (батьківських класів).
Реалізація методу в підкласі перевизначає (заміщає) його реалізацію в суперкласі, описуючи метод з тією ж сигнатурою. Версія методу, яка буде виконуватись, визначається об’єктом, використовуваним для його виклику. Якщо виклик методу походить від об’єкта батьківського класу, то виконується версія методу батьківського класу, якщо ж об’єкт підкласу викликає метод, то виконується версія спадкоємця.
Do'stlaringiz bilan baham: |