函数重载(定义及使用案例)

函数重载就像是一个词有多重含义(就像英语)。比如:sprIng

If leeks are unavailable, use spring onions instead.

如果没有韭葱,就用洋葱苗来替代。

 Spring is here again.

春天又来了。

helical spring

螺旋形弹簧

以上案例取自:https://fanyi.so.com/#spring

由此可见,同一个词在不同的环境中代表的含义不同,可以根据上下文来确定。函数重载与此类似,即一个函数可以用来执行不同的操作,那么如何判定函数在不同情况下执行哪一个操作呢?这个关键就在于函数的参数列表——也称为函数特征标(function signature)。

c++允许定义名称相同的函数(即使用函数重载),但是他们的使用环境不能相同,即参数列表不同!(参数列表的变量名无关紧要)

参数列表不同包括:参数数目不同  和/或   参数类型不同

具体案例有如下:

void print(const char* str,int width);      //  #1

void print(double d,int width);               //  #2

void print(long l,int width);                    //  #3

void print(int i,int width);                       //  #4

void print(const char*str);                     //  #5

具体使用时,编译器会根据上下文(即所采取的具体用法)使用具有相应特征标的原型:

print("pognrijgf",15);             //   use  #1

print("ofgnkoijr");                  //   use  #5

print(1999.0,10);                  //   use  #2

print(1999,21);                     //   use  #4

print(199L,15);                     //   use  #3

使用函数重载时,要在函数调用中使用正确的参数类型。例如,对于下面的语句,函数print()不与任何原型匹配。

unsigned int year=3210;

print(year,6);

但是!!!没有匹配的原型并不会自动停止使用其中的某个函数,因为c++将尝试使用标准类型转换强制进行匹配。如果#2原型是print()唯一的原型,则函数调用print(year,6)将year转换成double类型。但是在以上的代码中,有3个将数字作为第一个参数的原型,因此有3种转换year的方式,这种情况下,c++将拒绝这种函数调用,并将其视为错误。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

唐•苏凯

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

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

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

打赏作者

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

抵扣说明:

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

余额充值