Introduction to Polymorphism
Свайпніть щоб показати меню
Поліморфізм є ключовим поняттям. Походить від грецького слова, що означає "багато форм"; дозволяє об'єктам різних classes розглядатися як об'єкт спільного суперкласу. Найважливіший аспект — здатність різних сутностей реагувати по-своєму на одне й те саме повідомлення або виклик методу.
Види поліморфізму
Існує два основних види поліморфізму: поліморфізм часу компіляції (статичний) та поліморфізм часу виконання (динамічний). Розуміння того, як і коли використовувати кожен з них, є важливим для написання гнучкого та ефективного коду.
-
Поліморфізм часу компіляції: реалізується через перевантаження функцій або операторів, коли метод для виконання визначається під час компіляції.
-
Поліморфізм часу виконання: використовує віртуальні функції, дозволяючи похідним класам перевизначати методи базового класу, причому правильний метод обирається під час виконання.
Застосування та необхідність поліморфізму
Чудовий спосіб зрозуміти поліморфізм — це аналогія з реального життя. Розгляньте графічний інтерфейс користувача з кнопкою. Ця кнопка може поводитися по-різному залежно від контексту — вона може бути кнопкою завантаження, кнопкою скидання або кнопкою скасування.
Кожна кнопка виконує окрему дію при натисканні, але всі вони по суті є кнопками. Розгляньте теоретичну реалізацію цієї концепції.
UploadButton.h
ResetButton.h
CancelButton.h
1234class UploadButton : public Button { public: void onClick() { std::cout << "Upload" << std::endl; } };
Враховуючи, що всі кнопки мають однаковий метод onClick(), але з різними реалізаціями, розгляньмо це детальніше. Що, якщо нам потрібна функція, яка приймає об'єкт, що належить до одного з classes кнопок, як параметр?
main.cpp
1234567891011void 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(); }
Як видно, ручне створення окремих функцій для кожної кнопки може ускладнювати структуру, особливо під час внесення змін, оскільки кожну функцію потрібно редагувати окремо у разі виникнення проблем. Також у головній функції знадобляться додаткові перевірки для визначення, яку функцію викликати. Поліморфізм дозволяє легко вирішити ці проблеми.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат