函数重载及各种情况

函数名相同,但参数列表不同的称为重载,不能以返回值作为重载的条件

思考

下面的函数能否成为重载函数

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(),编译器分不清。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值