Студопедия
Новини освіти і науки:
МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах


РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання


ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ"


ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ


Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків


Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні


Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах


Гендерна антидискримінаційна експертиза може зробити нас моральними рабами


ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ


ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів



Контакти
 


Тлумачний словник
Авто
Автоматизація
Архітектура
Астрономія
Аудит
Біологія
Будівництво
Бухгалтерія
Винахідництво
Виробництво
Військова справа
Генетика
Географія
Геологія
Господарство
Держава
Дім
Екологія
Економетрика
Економіка
Електроніка
Журналістика та ЗМІ
Зв'язок
Іноземні мови
Інформатика
Історія
Комп'ютери
Креслення
Кулінарія
Культура
Лексикологія
Література
Логіка
Маркетинг
Математика
Машинобудування
Медицина
Менеджмент
Метали і Зварювання
Механіка
Мистецтво
Музика
Населення
Освіта
Охорона безпеки життя
Охорона Праці
Педагогіка
Політика
Право
Програмування
Промисловість
Психологія
Радіо
Регилия
Соціологія
Спорт
Стандартизація
Технології
Торгівля
Туризм
Фізика
Фізіологія
Філософія
Фінанси
Хімія
Юриспунденкция






Приклад 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() є чисто віртуальною, гарантує її обов’язкову підміну у кожному похідному класі.


Читайте також:

  1. Абсолютні синоніми (наприклад, власне мовні й запозичені) в одному тексті ділового стилю вживати не рекомендується.
  2. Алгоритм однофакторного дисперсійного аналізу за Фішером. Приклад
  3. Базові та прикладні класифікації
  4. В чому полягає явище тунелювання через потенціальний бар’єр, наведіть приклади.
  5. Визначення і приклади
  6. Врахування витраті втрат електроенергії. Приклад складання електробалансу.
  7. Головною метою наукової діяльності в системі вищої освіти повинен стати розвиток фундаментальних та приклад­них досліджень.
  8. Деякі приклади застосування ППП
  9. Дієслова з префіксом дис-виражають значення ліквідації дії, названої безпрефіксним дієсловом, наприклад: гармонізувати – дисгармонізувати, асоціювати – дисасоціювати.
  10. Для одиничного і дрібносерійного виробництва норма витрати визначається як укрупнена, наприклад, на 1000 станко-годин роботи даного виду роботи устаткування
  11. Додаток И - Приклад виконання ремонтного креслення деталі
  12. Етикет – (прикріплювати) установлений порядок поведінки в товаристві, певному оточенні, наприклад, придворний етикет, дипломатичний етикет.




Переглядів: 734

<== попередня сторінка | наступна сторінка ==>
Методика тестування КІСП аудитором | Застосування поліморфізму

Не знайшли потрібну інформацію? Скористайтесь пошуком google:

 

© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове.


Генерація сторінки за: 0.004 сек.