div.main {margin-left: 20pt; margin-right: 20pt}
Функции, часть 3 - перегрузка функций
А. Согомонян, Азбука Visual Basic
Перегрузка функций - это создание нескольких функций с одним именем, но с разными параметрами. Разные параметры значит что должно быть разным количество аргументов функции или их тип. Вот так например: 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-овский компилятор про кандидатов не скажет, он не очень разговорчив :] )
Вот и все. Особо перегрузкой не увлекайтесь :]
|