Предефиниране (overloading) на функции
В C++ е допустимо в една и съща програма да се използват няколко функции, които имат различни аргументи, но едно и също име. Когато се използва едно и също име за дефиниране на няколко функции се говори за предефиниране на функции.
[note]
В литературата на български език няма единна терминология за обозначаване на това свойство на C++. Други често използвани термини за обозначаване на предефинирането на функции (function overloading) са: функции с много имена, препокриване на функции. Все пак, като че ли най-често се използва предефиниране на функции.
[/note]
Нека разгледаме следната ситуация. Трябва да се дефинира функция, която събира две числа и връща резултата. Тази функция трябва да може да се използва, както с аргументи от типа \lstinline{int}, така и с аргументи от типа double. Да разгледаме следния фрагмент:
int add(int x, int y) {
return x+y;
}
double add(double x, double y) {
return x+y;
}
int main() {
int a=1,b=2;
double x=1.0,y=2.0;
int si=add(a,b);
double sd=add(x,y);
return 0;
}
При използването на функция с име add компилаторът преценява коя точно дефиниция на функцията трябва да използва като търси съвпадение на типовете на действителните аргументи с типовете от дефиницията на функцията. Тъй като в ред 13 функцията add се извиква с цели аргументи, компилаторът ще използва дефиницията от ред 1. В ред 14 ще се използва дефиницията от ред 5, тъй като аргументите са от типа double.

Pingback: CPP-101: Кратък обзор на езика за програмиране C++ | Записки по програмиране