2021-03-28

C++函数重载

在C语言中,同一个程序中是不能定义多个名称相同的函数,否则编译会报重定义的错误信息,但是C++中则允许定义多个名称相同的函数,在C++中,这称之为函数重载,让我们来看看更官方一点的定义,函数重载是指在同一作用域内,可以有一组具有相同函数名,不同参数列表的函数,这组函数被称为重载函数。 此外需要注意的是,函数的返回值不构成重载条件。

//类A和类B的两个同名show()函数不构成重载
//因为两个函数的作用域不一样
class A
{    
    public:
 void show(int x){} 
};

class B
{
    public:
 void show(double x){} 
};

```cpp

//因为两个函数的参数一样,返回值类型不同不能构成重载
class A
{
    public:
 void show(int x){} 
 int  show(int x){}
};

```cpp
//类A两个同名show()函数构成重载
//因为两个同名函数作用域相同,且参数列表不一样
class A
{
    public:
 void show(int x){} 
 void  show(double x){}
};

注:重载函数的条件之一参数列表不同包括参数个数不同或者参数类型不同或者参数顺序不同都可以。

函数重载的好处

避免了名字空间的污染,提高了程序的可读性。

编译器如何解决命名冲突

我们定义两个重载函数如下图所示,然后对生成的可执行利用objdump -d a.out命令进行反汇编观察,可以看出,int add(int x, int y)编译之后其函数签名变为__Z3addii,函数float add(float x, float y)编译之后其函数签名变为__Z3addff, 不难发现,经过编译之后,函数名变的不那么单纯了,会增加一些其它的信息进去,具体说来,编译之后的函数名会包含返回值类型的信息、参数列表信息等等。这种技术叫命名修饰。在这里插入图片描述
在这里插入图片描述
不同编译器的命名修饰规则不同,只要明白c++中是通过这种方法来解决命名冲突问题。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

FG.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值