Перегрузка функций
Цель перегрузки состоит в том, чтобы функция с одним именем по-разному выполнялась и возвращала разные значения при обращении к ней с различными типами и различным числом фактических параметров. Для обеспечения перегрузки необходимо для каждой перегруженной функции определить возвращаемые значения и передаваемые параметры так, чтобы каждая перегруженная функция отличалась от другой функции с тем же именем. Компилятор определяет какую функцию выбрать по типу фактических параметров.
Пример.
#include<iostream.h>
#include <string.h>
int max(int a,int b)
{
if(a>b)return a;
else return b;
}
float max(float a,float b)
{
if(a>b)return a;
else return b;
}
char*max(char*a,char*b)
{
if(strcmp(a,b)>0) return a;
else return b;
}
void main()
{
int a1,b1;
float a2, b2;
char s1[20];
char s2[20];
cout<<"\nfor int:\n";
cout<<"a=?";cin>>a1;
cout<<"b=?";cin>>b1;
cout<<"\nMAX="<<max(a1,b1)<<"\n";
cout<<"\nfor float:\n";
cout<<"a=?";cin>>a2;
cout<<"b=?";cin>>b2;
cout<<"\nMAX="<<max(a2,b2)<<"\n";
cout<<"\nfor char*:\n";
cout<<"a=?";cin>>s1;
cout<<"b=?";cin>>s2;
cout<<"\nMAX="<<max(s1,s2)<<"\n";
}
Правила описания перегруженных функций:
1) Перегруженные функции должны находиться в одной области видимости.
2) Перегруженные функции могут иметь параметры по умолчанию, при этом значения одного и того же параметра в разных функциях должны совпадать. В разных вариантах перегруженных функций может быть разное количество умалчиваемых параметров.
3) Функции не могут быть перегружены, если описание их параметров отличается только модификатором const или наличием ссылки.
Например, функции int&f1(int&,const int&){. . . } и int f1(int,int){. . . } – не являются перегруженными, т. к. компилятор не сможет узнать какая из функций вызывается: нет синтаксических отличий между вызовом функции, которая передает параметр по значению и функции, которая передает параметр по ссылке.
Дата добавления: 2015-09-18; просмотров: 649;