Перевантаження функції

Матеріал з Вікіпедії — вільної енциклопедії.
Версія від 13:51, 12 травня 2020, створена BunykBot (обговорення | внесок) (заміна застарілого тегу source)
Перейти до навігації Перейти до пошуку

Перевантаження функції, перевантаження процедури або ж перевантаження методу (англ. function overloading or method overloading) — в програмуванні один із засобів реалізації поліморфізму (ad hoc поліморфізм), що полягає в можливості створювати кілька реалізацій функції (методу) із тим же ім'ям проте з різною сигнатурою — з різною кількістю параметрів або з різним типом параметрів[1]. Дана можливість з'явилась ще в процедурних мовах програмування, з появою ж об'єктно-орієнтованого підходу можливість поширилась на методи (функції-члени) одного і того ж класу, зокрема і на конструктори класу.

Для прикладу, doTask() та doTask(object O) — це два різні перевантажені методи. Перший метод не має параметрів, а другий має ту ж назву, проте може приймати як параметр певний об'єкт.

Правила перевантаження функцій

  • Перевантажені функції мають мати різну кількість параметрів або типи даних.
  • Мати однакове ім'я функції, яке буде використовуватись для виклику всіх її варіантів.

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

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

Приклад: перевантаження функцій у c++

#include <iostream>

// Об'єм куба
int volume(int s)
{
    return s*s*s;
}

// Об'єм циліндра
double volume(double r, int h)
{
    return 3.14*r*r*static_cast<double>(h);
}

// Об'єм кубоїда
long volume(long l, int b, int h)
{
    return l*b*h;
}

int main()
{
    std::cout << volume(10);
    std::cout << volume(2.5, 8);
    std::cout << volume(100, 75, 15);
}

В вище наведеному прикладі, об'єм підрахований методами з різним набором аргументів, буде вибирати функцію для підрахунку об'єму відповідної фігури.

Див. також

Джерела