Вчимося програмувати мовою C Поліморфізм

Коли програмісти говорять про C++ та об'єктно-орієнтоване програмування, то дуже часто вживають термін поліморфізм. У випадку поліморфізм є здатність об'єкта змінювати форму. Якщо ви розділите цей термін на частини, то виявите, що полі означає багато, а морфізм відноситься до зміни форми. Поліморфний об'єкт, отже, є об'єкт, який може приймати різні форми. Цей урок вводить поняття поліморфізму та розглядає, як використовувати поліморфні об'єкти всередині ваших програм для спрощення та зменшення коду. До кінця цього уроку ви опануєте такі основні концепції:

* Поліморфізм є здатністю об'єкта змінювати форму під час виконання програми. * C++ спрощує створення поліморфних об'єктів. * Для створення поліморфних об'єктів ваші програми повинні використовувати віртуальні (virtual) функції. * Віртуальна (virtual) функція – це функція базового класу, перед іменем якої стоїть ключове слово virtual. * Будь-який похідний від базового класу може використовувати або перевантажувати віртуальні функції. * Для створення поліморфного об'єкта слід використовувати вказівник на об'єкт базового класу.

ЩО ТАКЕ ПОЛІМОРФІЗМ

Набір номера 602-555-1212

Пік пік Набір номера 212-555-1212

Будь ласка, сплатіть 25 центів

Набір номера 212-555-1212

Як згадувалося, поліморфний об'єкт є такий об'єкт, який змінює форму під час виконання програми. Попередня програма, наприклад, не використовувала поліморфних об'єктів. Інакше кажучи, в ній немає об'єктів, які б змінювали форму. СТВОРЕННЯ ПОЛІМОРФНОГО ОБ'ЄКТУ-ТЕЛЕФОНУ

Якщо ви відкомпілюєте та запустите цю програму, на екрані дисплея з'явиться наступнийвисновок:

Набір номера 818-555-1212

Пік-пік Набір номера 303-555-1212

Будь ласка, сплатіть 25 центів

Набір номера 212-555-1212

Оскільки об'єкт poly_phone змінює форму у міру виконання програми, він є поліморфним.

Поліморфні об'єкти можуть змінювати форму під час виконання програми

ЩО ТАКЕ ЧИСТО ВІРТУАЛЬНІ ФУНКЦІЇ

Як ви вже знаєте, для створення об'єкта поліморфного ваші програми визначають один або кілька методів базового класу як віртуальні функції. Похідний клас може визначити свою власну функцію, яка виконується замість віртуальної функції базового класу, або використовувати базову функцію (іншими словами похідний клас може і не визначати свій власний метод). Залежно від програми іноді немає сенсу визначати віртуальну функцію у базовому класі. Наприклад, об'єкти похідних типів можуть настільки відрізнятися, що їм не потрібно буде використовувати метод базового класу. У таких випадках замість визначення операторів для віртуальної функції базового класу ваші програми можуть створити суто віртуальну функцію, яка не містить операторів.

Для створення суто віртуальної функції програма вказує прототип функції, але не вказує її оператори. Натомість програма надає функції значення нуль, як показано нижче: