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


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


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


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


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


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


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


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


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


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



Контакти
 


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






Лекція 10

Поліморфізм

Поліморфізм – це можливість зв’язувати специфічні об’єкти похідних класів з вказівниками базового класу підчас виконання програми.

Допустимо, в програмі про тварин ієрархія буде розділена на два класи – Bird (птахи) та Mammal (ссавці). Клас Bird включає функцію-член Fly( ) (літати). Клас Mammal має ряд похідних класів, наприклад, клас Horse (кінь). Клас Horse включає дві функції-члени – Whinny( ) (ржати) та Gallop( ) (галоп).

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

Перше рішення – скопіювати метод Fly( ) в клас Кінь та зробити клас Пегас похідним від класу Кінь. Але тоді метод Fly( ) буде в двох місцях. І якщо колись треба буде його змінити, то це треба робити в двох екземплярах. Це створює певні незручності.

Друге рішення – можна перейменувати метод Gallop( ) класу Кінь в метод Move( ) , а потім перевизначити його в класі Пегас так, щоб він виконував функції методу Fly( ). Таким чином метод Move( ) в класі Кінь буде виконувати функції методу Gallop( ), а в класі Пегас – методу Fly( ) та методу Gallop( ).

Pegasus : : Move(long distance)

{

if (distance > veryFar)

fly(distance);

else

gallop(distance);

}

 

Третє рішення – перенести метод Fly( ) наверх в клас Кінь. Переміщення необхідної функції вище за ієрархією класів – це звичайне рішення подібних проблем. Це призводить до збільшення кількості функцій в базовому класі. А таке явище небезпечне.

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

сlass Horse

{

public:

void Gallop( )

virtual void Fly( )

private:

int itsAge;

};

 

class Pegasus : public Horse

{

public:

virtual void Fly( )

};

Це все були рішення в рамках одиночного наслідування.

 




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

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

 

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


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