函数名相同,但参数列表不同的称为重载,不能以返回值作为重载的条件
思考
下面的函数能否成为重载函数
void add(int a, int b)
{
std::cout << "1";
}
void add(float a, float b)
{
std::cout << "2";
}
int main()
{
add(2.2,2.2);
//add(1,1);
}
这里不能作为重载的条件,这个程序运行不了,因为2.2也可以转成int类型,而将参数1,1传入,就能构成重载
void func(int *p)
{
}
void func(int a[])
{
}
这个不能,因为数组就是指针
void func(int a,int b)
{}
void func(int& a,int& b)
{}
这个,如果传入的是a和b,那么不能重载,如果传入的是数值比如10和20,就能构成重载,因为引用不能是常量
void func(float a,float b)
{}
void func(int& a,int& b)
{}
char a=100;
char b=200;
func((int)a,(int)b);
这里会调用第一个函数,因为类型转换没有真正的 将a、b转成int,只是临时的转成了int
int func(int a,int b)
{}
int func(const int a,const int b)
{}
这个不能作为函数重载的条件,从原理上来说,给第一个函数传入a时,func里面的a再怎么修改都不会影响外面的a,对于第二个函数也是这个效果,所有就有了歧义
int func(int& a,int& b)
{}
int func(const int& a,const int& b)
{}
可以做为函数重载的条件
void func(int a, int b)
{
std::cout << "1";
}
void func(const int& a, const int& b)
{
}
不能作为重载的条件
void func(int a=100, int b=100)
{}
void func(float a=200.0, float b=200.0)
{}
当不传入参数时,不能发生重载,因为两个函数都是默认参数,都可以不传入参数,即func(),编译器分不清。