首先,重载只和“参数”“const”有关。和返回值无关。
static在重载函数中
无法重载,报错,但如果只有一个static int name(a,b,c)是可以的。
const在重载中
const修饰变量
其次,如果是简单如const int和int直接不能构成重载,因为函数传参过程无法确定const int和int
但是 char * a和const char* a是区分的,char *a 中a指向的是一个字符串变量,而const char *a指向的是一个字符串常量,所以当参数为字符串常量时,调用第二个函数,而当函数是字符串变量时,调用第一个函数。
对于引用,比如int &i 和const int & i 也是可以重载的,原因是第一个i引用的是一个变量,而第二个i引用的是一个常量
const修饰函数
看下面代码,首先
非成员函数不能使用。
下面例子则构成重载
char myoverload(int a, int b)const
{
cerr << "第二个";
return a + b;
}
/*
const 的是对函数的一个限定,使其无法修改类内的数据成员。const告诉别人这个函数不会
改变对象的状态。
声明一个函数用 const 关键字来说明这个函数是一个只读函数(read only method),
即不会修改任何的数据成员也就是不会改变该对象的状态。该类函数的声明和定义时都要加上
const 关键字。
*/
int myoverload(int a = 1, int b = 1)
{
cerr << "第三个";
return a + b;
}
缺省参数在重载中
函数个数和类型相同,一个缺省,一个不缺省时
调用时会出错
fun(int a,int b)和fun(int a,int b=10) 不构成重载,本质还是同一函数
函数个数和类型不相同时
如下代码,则构成重载,但是函数调用时
会报错的,无法运行,但这个和重载无关了,相当于第二个函数无法使用。
class testload {
int myoverload(int a, int b, int c = 10)
{
cout << "第一个函数";
return a + b + c;
}
char myoverload(int a, int b)
{
cerr << "第二个";
return a + b;
}