Перевантаження функції
Перевантаження функції, перевантаження процедури або ж перевантаження методу (англ. 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);
}
В вище наведеному прикладі, об'єм підрахований методами з різним набором аргументів, буде вибирати функцію для підрахунку об'єму відповідної фігури.