C++实操 - 重载 Overload

本文探讨了C++中函数重载的机制,如何通过参数列表区分同名函数,并介绍了运算符重载的概念,以及为何返回类型不影响函数重载。还涉及了子类继承中虚函数的重载规则。最后,详细讲解了如何重载C++内置运算符并给出实例。

C++作为面向对象语言,其中一个特性就是函数重载(overload)。

在C语言中,如果定义同名函数,以下代码为例:


int func()

{

  return 0;

}



int func(int a)

{

  return 0;

}



int main()

{

  return 0;

}

编译如下:

$ gcc -o test test.c

test.c:9:5: error: redefinition of ‘func’

    9 | int func(int a)

      |     ^~~~

test.c:4:5: note: previous definition of ‘func’ was here

    4 | int func()

      |     ^~~~

提示func这个函数被重复定义,这表明C语言中,函数名是不能重复的。

但上面的代码,用C++来编译:

$ g++ -o test test.cpp

编译通过,没有问题。

所以C++里是可以同名函数的,只要参数列表不同即可,这种机制就叫做函数重载。

有了重载机制可以更灵活的定义函数,将具体调用哪个函数的任务交给编译器,我们只要把功能类似而只是参数不同的函数都使用同一个名字。

除了函数重载,还有运算符重载。指的是,在同一个命名空间内,可以对同样的函数名或操作符名进行多次声明,对每个声明来讲,其使用了不同的函数参数以及拥有不同的定义(实现)。

当调用这种重载的函数或运算符时,根据你使用的函数实参类型和个数,编译器来决定使用最合适的函数定义或操作符定义。

这个编译器判定的过程叫做重载解析,overload resolution。

但要注意的是,只有参数列表可以用来实现函数重载,而返回类型不影响重载。

很明显,函数参数类型信息和个数是调用函数时的输入信息,可以用来判断调用哪个函数合适。

而返回类型是返回执行后的输出信息,没法用来帮助判断应该调用哪个函数。

所以,如果函数名和参数列表相同,只返回值不同,是不能编译通过的。

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

夜流冰

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

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

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

打赏作者

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

抵扣说明:

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

余额充值