On-Line Библиотека www.XServer.ru - учебники, книги, статьи, документация, нормативная литература.
       Главная         В избранное         Контакты        Карта сайта   
    Навигация XServer.ru








 

Функции, часть 3 - перегрузка функций

А. Согомонян

Перегрузка функций - это создание нескольких функций с одним именем, но с разными параметрами. Разные параметры значит что должно быть разным количество аргументов функции или их тип. Вот так например:

void function(int x);
void function(int x,int y);
void function(float x);

Перегруженные имена функций - это главным образом удобство записи.Пример перегруженной функции-функция sqrt( ) (извлечение квадратного корня).Она перегружена для каждого типа параметра - int,float,double,long и т.д. Вы просто пишете sqrt(4) ili sqrt (3.463),компилятор сам понимает по типу параметра какую функцию надо вызвать.

пример:
#include <iostream.h>
void f(int x);
void f(double x);

int main()
{

f(10);
f(25e9);
//для тех кто не знает- 25e9 это 25*1000000000
return 0;
}
void f(int x)
{

cout<<" type of "<<x<<" is int"<<endl;
}

void f(double x)
{

cout<<" type of "<<x<<" is float"<<endl;
}


вот что получим:
type of 10 is int
type of 2.5e+10 is float


А бывает и так что компилятору не удается определить которую функцию вызывать, и он об этом естественно сообщает.:]
как всегда пример:
#include <iostream.h>

void f(float x);
void f(double x);

int main()
{
f(2);
return 0;
}

void f(float x)
{
cout<<" type of "<<x<<" is int"<<endl;
}

void f(double x)
{
cout<<" type of "<<x<<" is float"<<endl;
}

Тут вот неясно какого типа число 2: float или double ?
вот и компилятор вам скажет:
In function `int main()':
call of overloaded `f (int)' is ambiguous
candidates are: f(float) f(double)
( Microsoft-овский компилятор про кандидатов не скажет, он не очень разговорчив :] )

Вот и все. Особо перегрузкой не увлекайтесь :]



Литература по Basic