1、 函数重载的关键是函数的参数列表—-也称函数特征标。
2、如果两个函数的参数数目和类型相同,同时参数的排列顺序也相同,则他们的特征标相同。
3、C++允许定义名称相同的函数,条件是它们的特征标不同。
4、虽然函数重载很诱人,但也不要滥用。仅当函数基本上执行相同的任务,但使用不同形式的数据时,才应该使用函数重载;否则可以考虑使用默认参数,这样程序只要为一个函数请求内存。
5、注意事项:
a、编译器在检查函数特征标时,将把类型引用和类型本身视为同一个特征标。
double cube (double x);
double cube (double & x); //并非重载
b、如果函数名、形参类型和个数相同,即使函数返回值类型不同,编译器也会认为是函数重复定义的语法错误。
int add(int x,int y);
void add(int x,int y); //编译器报错
c、匹配函数时,并不区分const和非const变量。
void funstr(char * str)
{ cout << str << endl; }
void funstr(const char * str)
{ cout << str << endl;}
void funstr2(const char * str)
{ cout << "funstr2 " << str << endl; }
void funstr3(char * str)
{ cout << "funstr3 " << str << endl; }
char *str1 = {"hellow world !"};
const char *str2 = {"hellow const !"};
int main()
{
funstr(str1); # hellow world !
funstr(str2); # hellow const !
funstr2(str1); # funstr2 hellow world ! 非cost被压制成了const
funstr2(str2); # funstr2 hellow const !
funstr3(str1); # funstr3 hellow world !
//funstr3(str2); #编译器报错 const无法压制成非const
return 0;
}
d、正确重载
int add(int m,int n)
{
return m+n;
}
float add(float m,float n)
{
return m+n;
}
int main()
{
int i=1,j=2;
float f1=1.2,f2=2.3;
cout<< add(i,j)<<endl; # 3
cout<< add(f1,f2)<<endl; # 3.5
return 0;
}