- •2. Функції користувача
- •3. Оператори умови і їх використання
- •If (вираз) оператор; else оператор;
- •4. Типи даних: масиви, рядки.
- •6. Процедури і функції роботи з файлами.
- •7. Основні поняття об’єктно-орієнтованого програмування.
- •8. Поняття про наслідування та інкапсуляцію.
- •9. Механізми підтримки поліморфізму
9. Механізми підтримки поліморфізму
Під терміном поліморфізм розуміють механізм реалізації функції, у якому різні результати можна отримати за допомогою одного її імені. З цієї причини поліморфізм іноді характеризується фразою "один інтерфейс, багато методів". Це означає, що до всіх функцій-членів класу можна отримати доступ одним і тим самим способом, незважаючи на можливу відмінність у конкретних діях, пов'язаних з кожною окремою операцією. У мові програмування C++ поліморфізм підтримується як у процесі виконання програми, так у період її компілювання. Перевизначення операторів і функцій – це приклади поліморфізму, що належить до моменту компілювання. Але, попри потужність механізму перевизначення операторів і функцій, він не у змозі вирішити всі завдання, які виникають в реальних додатках, розроблених з використанням об'єктно-орієнтованого програмування. Тому у мові C++ також реалізовано поліморфізм періоду виконання, який базується на використанні похідних класів і віртуальних функцій.
Віртуальна функція – це така функція, яка оголошується в базовому класі з використанням ключового слова virtual і перевизначається в одному або декількох похідних класах. Таким чином, кожен похідний клас може мати власну версію віртуальної функції.
class baseClass { // Оголошення базового класу
public:
// Оголошення віртуальної функції
virtual void Show() { cout << Cyr("Базовий клас.") << endl; }};
class firstD : public baseClass {
public:
// Перевизначення функції Show() для класу firstD.
void Show() { cout << Cyr("Перший похідний клас.") << endl; }};
Для успішного застосування поліморфізму необхідно розуміти, що базовий і похідний класи утворюють ієрархію, розвиток якої спрямований від більшого до меншого ступеня узагальнення (тобто від базового класу до похідного). У разі коректної реалізації базовий клас забезпечує всі елементи, які похідний клас може використовувати безпосередньо. Він також визначає функції, які похідний клас повинен реалізувати самостійно. Це дає похідному класу гнучкість у визначенні власних методів, але водночас зобов'язує використовувати загальний інтерфейс. Іншими словами, оскільки формат інтерфейсу визначається базовим класом, то будь-який похідний клас повинен розділяти цей загальний інтерфейс. Таким чином, застосування віртуальних функцій дає змогу базовому класу визначати узагальнений інтерфейс, який використовуватиметься всіма похідними класами.