Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Вступ до Поліморфізму | Огляд Поліморфізму
C++ ООП
course content

Зміст курсу

C++ ООП

C++ ООП

1. Основи ООП у C++
2. Конструктори та Деструктори
3. Огляд Інкапсуляції
4. Огляд Наслідування
5. Огляд Поліморфізму

book
Вступ до Поліморфізму

Note
Визначення

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

Види поліморфізму

Існує два основних види поліморфізму: поліморфізм часу компіляції (статичний) та поліморфізм часу виконання (динамічний). Розуміння того, як і коли використовувати кожен з них, є важливим для написання гнучкого та ефективного коду.

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

  • Поліморфізм часу виконання: використовує віртуальні функції, дозволяючи похідним класам перевизначати методи базового класу, причому правильний метод вибирається під час виконання.

Застосування та необхідність поліморфізму

Відмінним способом зрозуміти поліморфізм є аналогія з реальним світом. Розгляньте графічний інтерфейс користувача з кнопкою. Ця кнопка може поводитися по-різному залежно від контексту — вона може виконувати роль кнопки завантаження, кнопки скидання або кнопки скасування.

Кожна кнопка виконує окрему дію при натисканні, але всі вони по суті є кнопками. Розгляньте теоретичну реалізацію цієї концепції.

UploadButton.h

UploadButton.h

ResetButton.h

ResetButton.h

CancelButton.h

CancelButton.h

copy
1234
class UploadButton : public Button { public: void onClick() { std::cout << "Upload" << std::endl; } };

Враховуючи, що всі кнопки мають однаковий метод onClick(), але з різними реалізаціями, розгляньмо це детальніше. Що, якщо нам потрібна функція, яка приймає об'єкт, що належить до одного з classes кнопок, як параметр?

main.cpp

main.cpp

copy
1234567891011
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(); }

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

question mark

Яке буквальне значення терміна поліморфізм?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 5. Розділ 1

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

course content

Зміст курсу

C++ ООП

C++ ООП

1. Основи ООП у C++
2. Конструктори та Деструктори
3. Огляд Інкапсуляції
4. Огляд Наслідування
5. Огляд Поліморфізму

book
Вступ до Поліморфізму

Note
Визначення

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

Види поліморфізму

Існує два основних види поліморфізму: поліморфізм часу компіляції (статичний) та поліморфізм часу виконання (динамічний). Розуміння того, як і коли використовувати кожен з них, є важливим для написання гнучкого та ефективного коду.

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

  • Поліморфізм часу виконання: використовує віртуальні функції, дозволяючи похідним класам перевизначати методи базового класу, причому правильний метод вибирається під час виконання.

Застосування та необхідність поліморфізму

Відмінним способом зрозуміти поліморфізм є аналогія з реальним світом. Розгляньте графічний інтерфейс користувача з кнопкою. Ця кнопка може поводитися по-різному залежно від контексту — вона може виконувати роль кнопки завантаження, кнопки скидання або кнопки скасування.

Кожна кнопка виконує окрему дію при натисканні, але всі вони по суті є кнопками. Розгляньте теоретичну реалізацію цієї концепції.

UploadButton.h

UploadButton.h

ResetButton.h

ResetButton.h

CancelButton.h

CancelButton.h

copy
1234
class UploadButton : public Button { public: void onClick() { std::cout << "Upload" << std::endl; } };

Враховуючи, що всі кнопки мають однаковий метод onClick(), але з різними реалізаціями, розгляньмо це детальніше. Що, якщо нам потрібна функція, яка приймає об'єкт, що належить до одного з classes кнопок, як параметр?

main.cpp

main.cpp

copy
1234567891011
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(); }

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

question mark

Яке буквальне значення терміна поліморфізм?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 5. Розділ 1
some-alt