Предефиниране (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++ | Записки по програмиране