Зміст курсу
C++ ООП
C++ ООП
Вступ до Поліморфізму
Поліморфізм є ключовим поняттям. Походить від грецького слова, що означає "багато форм", і дозволяє об'єктам різних classes
розглядатися як об'єкти спільного суперкласу. Найважливішою особливістю є здатність різних сутностей реагувати по-своєму на одне й те саме повідомлення або виклик методу.
Види поліморфізму
Існує два основних види поліморфізму: поліморфізм часу компіляції (статичний) та поліморфізм часу виконання (динамічний). Розуміння того, як і коли використовувати кожен з них, є важливим для написання гнучкого та ефективного коду.
Поліморфізм часу компіляції: реалізується через перевантаження функцій або операторів, коли метод для виконання визначається під час компіляції.
Поліморфізм часу виконання: використовує віртуальні функції, дозволяючи похідним класам перевизначати методи базового класу, причому правильний метод вибирається під час виконання.
Застосування та необхідність поліморфізму
Відмінним способом зрозуміти поліморфізм є аналогія з реальним світом. Розгляньте графічний інтерфейс користувача з кнопкою. Ця кнопка може поводитися по-різному залежно від контексту — вона може виконувати роль кнопки завантаження, кнопки скидання або кнопки скасування.
Кожна кнопка виконує окрему дію при натисканні, але всі вони по суті є кнопками. Розгляньте теоретичну реалізацію цієї концепції.
UploadButton.h
ResetButton.h
CancelButton.h
class UploadButton : public Button { public: void onClick() { std::cout << "Upload" << std::endl; } };
Враховуючи, що всі кнопки мають однаковий метод onClick()
, але з різними реалізаціями, розгляньмо це детальніше. Що, якщо нам потрібна функція, яка приймає об'єкт, що належить до одного з classes
кнопок, як параметр?
main.cpp
void user_clicked_upload_button(const UploadButton& btn) { btn.onClick(); } void user_clicked_reset_button(const ResetButton& btn) { btn.onClick(); } void user_clicked_cancel_button(const CancelButton& btn) { btn.onClick(); }
Як видно, ручне створення окремих функцій для кожної кнопки може ускладнювати структуру, особливо під час внесення змін, оскільки кожну функцію потрібно редагувати окремо у разі виникнення проблем. Також у головній функції знадобляться додаткові перевірки для визначення, яку функцію викликати. Поліморфізм дозволяє легко вирішити ці проблеми.
Дякуємо за ваш відгук!