Вступ до Поліморфізму
Поліморфізм є ключовим поняттям. Походить від грецького слова, що означає "багато форм", і дозволяє об'єктам різних 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(); }
Як видно, ручне створення окремих функцій для кожної кнопки може ускладнювати структуру, особливо під час внесення змін, оскільки кожну функцію потрібно редагувати окремо у разі виникнення проблем. Також у головній функції знадобляться додаткові перевірки для визначення, яку функцію викликати. Поліморфізм дозволяє легко вирішити ці проблеми.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Awesome!
Completion rate improved to 3.13
Вступ до Поліморфізму
Свайпніть щоб показати меню
Поліморфізм є ключовим поняттям. Походить від грецького слова, що означає "багато форм", і дозволяє об'єктам різних 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(); }
Як видно, ручне створення окремих функцій для кожної кнопки може ускладнювати структуру, особливо під час внесення змін, оскільки кожну функцію потрібно редагувати окремо у разі виникнення проблем. Також у головній функції знадобляться додаткові перевірки для визначення, яку функцію викликати. Поліморфізм дозволяє легко вирішити ці проблеми.
Дякуємо за ваш відгук!