什么是函数重载?
1、首先是定义:一组函数,其函数名相同,但是函数参数个数或者类型不同,那么这组函数就是重载函数。比如下面这组函数:
int compare(int a,int b)
{
cout<<"this is compare int"<<endl;
return a>b;
}
int compare(double a,double b)
{
cout<<"this is compare double"<<endl;
return a>b;
}
int compare(const char *a,const char *b)
{
cout<<"this is compare har *"<<endl;
return strcmp(a,b);
}
C++程序在内存布局中,用函数名+参数列表类型组成函数符号,而C程序则是用函数名来组成函数符号,所以C程序不允许重载。
2、函数称得上重载,就必须处于同一个作用域
这里重新考虑一下作用域这个概念。请看如下代码:
int main()
{
{
int b=4;
}
cout<<b<<endl;
return 0;
}
这里打印b,会报b没有定义的错误。{}左右大括号可以直接使用作为限定访问域。对于重载来说类似,如果访问域不同,就算不上重载。
3、const或者volatile如何影响形参类型?
先看函数参数前加了const类型的情况:
void fun(int a){}
void fun(const int a){}
这里会报fun函数已定义的错误。首先对于a来说,其是int类型。即使加了const,编译器仍然识别a为int类型。所以本质上两个fun函数形参一致。
总结
对于函数重载,使用并不难。值得关注的是函数重载是C++静态多态的实现方式之一。对于多态后续将深入剖析。