Слово поліморфізм означає наявність багатьох форм. Простими словами, ми можемо визначити поліморфізм як здатність повідомлення відображатися в більш ніж одній формі. Прикладом поліморфізму з реального життя є людина, яка одночасно може мати різні характеристики. Чоловік одночасно є і батьком, і чоловіком, і працівником. Отже, одна й та сама людина демонструє різну поведінку в різних ситуаціях. Це називається поліморфізмом. Поліморфізм вважається однією з важливих особливостей об'єктно-орієнтованого програмування.
Види поліморфізму
- Поліморфізм під час компіляції
- Поліморфізм виконання

Види поліморфізму
1. Поліморфізм під час компіляції
Цей тип поліморфізму досягається шляхом перевантаження функцій або операторів.
A. Перевантаження функцій
Якщо існує кілька функцій з однаковими назвами, але різними параметрами, то такі функції називаються перевантажений, тому це відоме як перевантаження функцій. Функції можуть бути перевантажені зміна кількості аргументів або/та зміна типу аргументів . Простіше кажучи, це особливість об’єктно-орієнтованого програмування, що забезпечує багато функцій, які мають однакові назви, але різні параметри, коли численні завдання перераховані під однією назвою функції. Існують певні правила перевантаження функцій, яких слід дотримуватися під час перевантаження функції.
Нижче наведено програму C++, яка показує перевантаження функцій або поліморфізм під час компіляції:
C++
// C++ program to demonstrate> // function overloading or> // Compile-time Polymorphism> #include> using> namespace> std;> class> Geeks {> public> :> > // Function with 1 int parameter> > void> func(> int> x)> > {> > cout <<> 'value of x is '> << x << endl;> > }> > // Function with same name but> > // 1 double parameter> > void> func(> double> x)> > {> > cout <<> 'value of x is '> << x << endl;> > }> > // Function with same name and> > // 2 int parameters> > void> func(> int> x,> int> y)> > {> > cout <<> 'value of x and y is '> << x <<> ', '> << y> > << endl;> > }> };> // Driver code> int> main()> {> > Geeks obj1;> > // Function being called depends> > // on the parameters passed> > // func() is called with int value> > obj1.func(7);> > // func() is called with double value> > obj1.func(9.132);> > // func() is called with 2 int values> > obj1.func(85, 64);> > return> 0;> }> |
>
pyspark sql
>Вихід
value of x is 7 value of x is 9.132 value of x and y is 85, 64>
Пояснення: У наведеному вище прикладі одна функція під назвою function функція() діє по-різному в трьох різних ситуаціях, що є властивістю поліморфізму. Щоб дізнатися більше про це, ви можете звернутися до статті – Перевантаження функцій у C++ .
B. Перевантаження оператора
C++ має можливість надавати операторам особливе значення для типу даних, ця здатність відома як перевантаження операторів. Наприклад, ми можемо використати оператор додавання (+) для класу рядків, щоб об’єднати два рядки. Ми знаємо, що завдання цього оператора полягає в додаванні двох операндів. Таким чином, єдиний оператор «+», розміщений між цілими операндами, додає їх, а якщо розміщений між рядковими операндами, об’єднує їх.
Нижче наведено програму C++ для демонстрації перевантаження операторів:
CPP
як дізнатися, чи хтось заблокував вас на android
// C++ program to demonstrate> // Operator Overloading or> // Compile-Time Polymorphism> #include> using> namespace> std;> class> Complex {> private> :> > int> real, imag;> public> :> > Complex(> int> r = 0,> int> i = 0)> > {> > real = r;> > imag = i;> > }> > // This is automatically called> > // when '+' is used with between> > // two Complex objects> > Complex operator+(Complex> const> & obj)> > {> > Complex res;> > res.real = real + obj.real;> > res.imag = imag + obj.imag;> > return> res;> > }> > void> print() { cout << real <<> ' + i'> << imag << endl; }> };> // Driver code> int> main()> {> > Complex c1(10, 5), c2(2, 4);> > // An example call to 'operator+'> > Complex c3 = c1 + c2;> > c3.print();> }> |
>
>Вихід
12 + i9>
Пояснення: У наведеному вище прикладі оператор «+» перевантажено. Зазвичай цей оператор використовується для додавання двох чисел (цілих або чисел з плаваючою комою), але тут оператор призначений для додавання двох уявних або комплексних чисел. Щоб дізнатися більше про це, зверніться до статті – Перевантаження оператора .
2. Поліморфізм часу виконання
Цей тип поліморфізму досягається Перевизначення функції . Пізнє зв’язування та динамічний поліморфізм – інші назви поліморфізму часу виконання. Виклик функції вирішується під час виконання в поліморфізм часу виконання . На відміну від цього, з поліморфізмом під час компіляції компілятор визначає, який виклик функції прив’язати до об’єкта після його виведення під час виконання.
A. Перевизначення функції
Перевизначення функції виникає, коли похідний клас має визначення для однієї з функцій-членів базового класу. Цю базову функцію називають перевизначеною.

Перевизначення функції Пояснення
Поліморфізм часу виконання з елементами даних
Поліморфізм виконання не може бути досягнутий членами даних у C++. Давайте подивимося приклад, коли ми отримуємо доступ до поля за посиланням на змінну батьківського класу, яка посилається на примірник похідного класу.
C++
// C++ program for function overriding with data members> #include> using> namespace> std;> // base class declaration.> class> Animal {> public> :> > string color => 'Black'> ;> };> // inheriting Animal class.> class> Dog :> public> Animal {> public> :> > string color => 'Grey'> ;> };> // Driver code> int> main(> void> )> {> > Animal d = Dog();> // accessing the field by reference> > // variable which refers to derived> > cout << d.color;> }> |
сортувати arraylist
>
рядок jsonobject
>Вихід
Black>
Ми бачимо, що посилання на батьківський клас завжди посилатиметься на член даних батьківського класу.
B. Віртуальна функція
А віртуальна функція це функція-член, яка оголошена в базовому класі за допомогою ключового слова virtual і перевизначена (замінена) у похідному класі.
Деякі ключові моменти про віртуальні функції:
- Віртуальні функції мають динамічний характер.
- Вони визначаються вставкою ключового слова віртуальний всередині базового класу і завжди оголошуються з базовим класом і перевизначаються в дочірньому класі
- Віртуальна функція викликається під час виконання
Нижче наведено програму C++ для демонстрації віртуальної функції:
C++
// C++ Program to demonstrate> // the Virtual Function> #include> using> namespace> std;> // Declaring a Base class> class> GFG_Base {> public> :> > // virtual function> > virtual> void> display()> > {> > cout <<> 'Called virtual Base Class function'> > <<> '
'> ;> > }> > void> print()> > {> > cout <<> 'Called GFG_Base print function'> > <<> '
'> ;> > }> };> // Declaring a Child Class> class> GFG_Child :> public> GFG_Base {> public> :> > void> display()> > {> > cout <<> 'Called GFG_Child Display Function'> > <<> '
'> ;> > }> > void> print()> > {> > cout <<> 'Called GFG_Child print Function'> > <<> '
'> ;> > }> };> // Driver code> int> main()> {> > // Create a reference of class GFG_Base> > GFG_Base* base;> > GFG_Child child;> > base = &child;> > // This will call the virtual function> > base->GFG_Base::display();> > // this will call the non-virtual function> > base->print();>> }> |
>
>Вихід
Called virtual Base Class function Called GFG_Base print function>
приклад 2:
C++
// C++ program for virtual function overriding> #include> using> namespace> std;> class> base {> public> :> > virtual> void> print()> > {> > cout <<> 'print base class'> << endl;> > }> > void> show() { cout <<> 'show base class'> << endl; }> };> class> derived :> public> base {> public> :> > // print () is already virtual function in> > // derived class, we could also declared as> > // virtual void print () explicitly> > void> print() { cout <<> 'print derived class'> << endl; }> > void> show() { cout <<> 'show derived class'> << endl; }> };> // Driver code> int> main()> {> > base* bptr;> > derived d;> > bptr = &d;> > // Virtual function, binded at> > // runtime (Runtime polymorphism)> > bptr->print();>> > // Non-virtual function, binded> > // at compile time> > bptr->показати ();> > return> 0;> }> |
змінні nginx
>
>Вихід
print derived class show base class>