В языке С++ реализована возможность использования одного идентификатора для функций, выполняющих различные действия над различными типами данных, в результате чего можно использовать несколько функций с одним и тем же именем, но с разными списками параметров, как по количеству, так и по типу.
Такие функции называют перегруженными, а сам механизм – перегрузка функций.
Компилятор определяет, к какой из функций с одним и тем же именем следует обратиться путем сравнения типов фактических аргументов с типами формальных параметров в заголовках всех этих функций, т.е. компилятор в зависимости от типа и количества аргументов будет формировать необходимое обращение к соответствующей функции.
Поиск функции, которую надо вызвать, осуществляется за три отдельных шага:
1. Поиск функции с точным соответствием параметров и ее использование, если она найдена.
2. Поиск соответствующей функции, используя встроенные преобразования типов данных.
3. Поиск соответствующей функции, используя преобразования, определенные пользователем.
Пример перегрузки функций
Приведем пример функции S1 с двумя параметрами х, у, работающая в зависимости от типа передаваемых аргументов, следующим образом:
– если тип параметров целочисленный, функция S1 складывает их значения и возвращает полученную сумму;
– если тип параметров long, функция S1 перемножает их значения и возвращает полученное произведение;
– если тип параметров вещественный, функция S1 делит их значения и возвращает частное от деления.
# include <stdio.h>
int S1 (int x, int y) {
return x+y;
}
long S1 (long x, long y) {
return x*y;
}
double S1 (double x, double y) {
return x/y;
}
int main ()
{
int a = 1, b = 2, c;
long i = 3, j = 4, k;
double x = 10, y = 2, z;
c=S1(a, b);
k=S1(i, j);
z=S1(x, y),
printf("\n c = %d; k = %ld; z = %lf . \n", c, k, z);