函数重载

函数重载指的是可以有多个同名的函数,因此对名称进行了重载。
 
如:
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("Pancakes"15);    //use #1
print("Syrup");           //use #5
print(1999.0, 10);      //use #2
print(199912);          //use #4
print(1999L15);         
//use #3
 
使用被重载的函数时,需要在函数调用中使用正确的参数类型。对于下面的语句:
unsigned int year = 3210;
print(year, 6);
它不与任何原型匹配!如果 #2 原型是 print() 的唯一原型,则函数调用 print(year, 6) 将把 year 转换为 double 类型。但在上面的代码中,有3个将数字作为第一个参数的原型,因此有3种转换 year 的方式。在这种情况下,C++将拒绝这种函数调用,并将其视为错误。
 
一些看起来彼此不同的特征标是不能共存的。例如:
double cube(double x);
double cube(double &x);
读者可能认为可以在此处使用函数 重载,因为它们的特征标看起来不同。但是,从编译器的角度来看,假设有下面这样的代码:
cout << cube(x);
参数 x 与 double x 原型和 double &x 原型都匹配,因此编译器无法确定究竟使用哪个原型。为避免这种混乱,编译器在检查函数特征标时,将把类型引用和类型本身视为同一个特征标。
 
谨记,是特征标,而不是函数类型使得可以对函数进行重载。例如,下面的两个生命是互斥的:
long gronk(int n, float m);
double gronk(int n, float m);
因此,C++不允许这种重载 gronk()。返回类型可以不同,但特征标也必须不同,如:
long gronk(int n, float m);
double gronk(float n, float m);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值