【C++】简单学——函数重载

目录:

概念

要求

C++能支持函数重载的原因

概念

函数重载是指在同一个作用域内可以有多个同名函数

要求

函数名相同参数要不同(以下三种情况满足一种即可),作用域要相同

  1. 类型顺序不同(其实本质也是类型不同)
  2. 参数个数不同
  3. 参数类型不同

举例子:

④之所以是错的,因为参数的类型顺序仍然是int 和 char,仅仅是参数名改变了并不算函数重载

⑤之所以是错的,因为他们不在同一个作用域当中

小坑:以下的两个函数是否构成函数重载?

int Add(int a, int c)
{
	return a + c;
}



int Add(int a, int c, int d = 3)
{
	return a + c + d;
}

答:只要满足函数名相同,参数不同,作用域相同,就可以满足函数重载

只不过以上的两个函数在调用的时候会存在调用歧义的报错

C++能支持函数重载的原因

在C语言中,不支持函数重载,而在C++中却支持

抛出问题:函数具体是根据什么调用的?

结论:函数是根据函数名来找指定的函数地址,然后根据地址去调用函数的

在C语言中

void func(int achar  c)和  void func ( char  cint  a)

函数名都是func,参与函数名修饰规则的就只有函数名

在C++中

修改了函数名的修饰规则,在名字中引入了参数的类型

不同平台的不同编译器的修饰规则都不同

在Linux中

G++中: 

f ( 1 , char  c)   的函数名为:_Z1fic

f ( char c , 1 )   的函数名为:_Z1fci

解析:_Z是函数名的前缀(不必在乎),1是指名字的字节数(名字的长度),f是函数名,i是int,c是char

为什么连名字的长度都要引入函数名修饰规则?

因为一个项目中,可能会出现很多个函数,如果我要找名字长度为1的函数,那我只需要到_Z1开头的函数中找就可以了,可以找的更快

 在windows中

在VS编译器中

猜测:YA前面的是前缀 , X代表返回值,H是int,D是char,没必要深入研究,只需要知道不同的编译器修饰规则不同即可

同名函数真正区分的地方其实是最后的类型缩写

C++中,因为修改了函数名的修饰规则,所以就能够区分同名而不同参数的函数,于是就支持了函数重载

注意:返回值不同不能算是函数重载(毕竟函数名修饰规则并没有把函数名也算进去)

例:

若支持,则以下情况将不知道该调用哪个,将无法解决

int Add  (int a  ,  int   b)

{

        return  a  + b;

}

void  Add(int  a,  int b)

{

        cout << a << b << endl;(打印a和b)

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CtrlZ大牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值