函数重载若干问题集(C++)

 

函数重载是指,在同一个作用域中,函数名相同形参表不同的多个函数称为函数重载。

一、只有返回值不同的函数不能成为函数重载,只要有参数不同就能称为函数重载。

例如:①/*不正确*/

       float fun(int x,int y);

int fun(int x ,int y);

②/*正确*/

float fun(int x);

int fun(int x ,int y);

注意:如果有默认参数时重写,可能出现重载失效,且默认参数不改变重载本质

例如:①/*调用会出错*/

float fun(int x);

int fun(int x ,int y=0);

二、一组特殊的重载比较

①/*不正确,不是函数重载,实际上它两需要同一个函数体*/

int fun(int x); //如果传过来的是一个数,比如2,那么它就是一个常数。

int fun(const int x);

②/*正确,为重载*/

float fun(int &x);

int fun(const int &x);

③/*正确,为重载*/

float fun(int *x);

int fun(const int *x);  //实际是个int型的常量,不可以改变*x,指针是可以变的

④/*正确,为重载*/

int fun(int *x);

int fun(int * const x); //为常指针,指向不能改变,所指向的内容可以改变

⑤/*正确,为重载*/

int fun(int * const x);

int fun(const int *x);

说明:常指针、常引用做参数表明该函数不会更新这个参数所指向和所引用的对象,这样在参数传递的过程中,就不会触发拷贝构造函数,

可以提高程序的运行效率。第一个不正确时编译器对参数的处理的时候不知道确切的那个所引起。也就是说只要参数能够明确区分的就能进行重载。

三、另一种特殊情形

①/*如下编译能够通过,但是不能算是函数重载,实际上是一个函数*/

typedef int * pI;

int fun(int *x);

int fun(pI x);

说明:编译器(VC6.0)对重复申明是不管的。只是重复定义是不可以的

四、重载函数在调用的时候出现二义性。

①/*如下如果不调用函数编译都能够通过,但是不能做函数重载,因为调用有歧义*/

int fun(int x);

int fun(int &x);

转载于:https://www.cnblogs.com/accipiter/archive/2012/09/21/2696715.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值