МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах
РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ" ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах Гендерна антидискримінаційна експертиза може зробити нас моральними рабами ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів
Контакти
Тлумачний словник Авто Автоматизація Архітектура Астрономія Аудит Біологія Будівництво Бухгалтерія Винахідництво Виробництво Військова справа Генетика Географія Геологія Господарство Держава Дім Екологія Економетрика Економіка Електроніка Журналістика та ЗМІ Зв'язок Іноземні мови Інформатика Історія Комп'ютери Креслення Кулінарія Культура Лексикологія Література Логіка Маркетинг Математика Машинобудування Медицина Менеджмент Метали і Зварювання Механіка Мистецтво Музика Населення Освіта Охорона безпеки життя Охорона Праці Педагогіка Політика Право Програмування Промисловість Психологія Радіо Регилия Соціологія Спорт Стандартизація Технології Торгівля Туризм Фізика Фізіологія Філософія Фінанси Хімія Юриспунденкция |
|
|||||||
Приклад 1Чисто віртуальні функції Тема 8 Застосування поліморфізму 1. Чисто віртуальні функції 2. Застосування поліморфізму Зазвичай, якщо віртуальна функція оголошується в базовому класі, то вона не виконує ніяких дій. Це цілком звичайна ситуація, оскільки часто в базовому класі закінчений тип даних не визначається. Замість цього в ньому просто міститься базовий набір функцій-членів і змінних, для яких у похідному класі визначається все відсутні. Коли у віртуальної функції базового класу відсутня значима дія, то в будь-якому класі, похідному від цього базового, така функція обов’язково повинна бути перевизначена. Для реалізації цього положення в С + + підтримуються так звані чисті віртуальні функції (pure virtual function). Чисто віртуальні функції не визначаються в базовому класі. Туди включаються тільки прототипи цих функцій. Для чистої віртуальної функції використовується така основна форма:
virtual тип ім’я функції (список_параметрів) = 0;
Ключовою частиною цього оголошення є прирівнювання функції нулю. Це повідомляє компілятору, що в базовому класі не існує тіла функції. Якщо функція задається як чиста віртуальна, це передбачає, що вона обов’язково повинна підмінятися в кожному похідному класі. Якщо цього немає, то при компіляції виникне помилка. Таким чином, створення чистих віртуальних функцій ‑ це шлях, який гарантує, що похідні класи забезпечать їх перевизначення. Якщо клас містить хоча б одну чисто віртуальну функцію, то про нього говорять як про абстрактний клас (abstract class). Оскільки в абстрактному класі міститься, принаймні, одна функція, у якої відсутнє тіло функції, технічно такий клас неповний, і жодного об’єкта цього класу створити не можна. Таким чином, абстрактні класи можуть бути тільки успадкованими. Вони ніколи не бувають ізольованими. Зауважимо, що можна створювати вказівники абстрактного класу, завдяки яким досягається динамічний поліморфізм. //Створення абстрактного класу class area { double diml, dim2; //розміри фігури public: void setarea (double dl, double d2) { diml = dl; dim2 = d2; } void getdim (double & dl, double & d2) { dl = diml; d2 = dini2; } virtual double getarea () = 0; / / чистo віртуальна функція }; class rectangle: public area { public: double getarea () { double dl, d2; getdim (dl, d2); return dl * d2; } }; class triangle: public area { public: double getarea () { double dl, d2; getdim (d1, d2); return 0.5 * dl * d2; } }; void main () { area * p; rectangle r; triangle t; r.setarea (3,3; 4.5); t.setarea (4.0, 5.0); р = & r; cout <<"Площа прямокутника: "<<p‑> getarea () <<”\ n”; р = &t; cout <<" Площа трикутника: "<< p‑> getarea () <<”\ n”; }
Тепер те, що функція getarea() є чисто віртуальною, гарантує її обов’язкову підміну у кожному похідному класі. Читайте також:
|
||||||||
|