注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

时间记录器

记录我的Linux、Android学习之路

 
 
 

日志

 
 

函数重载问题  

2010-10-24 16:25:11|  分类: C++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

(一)函数重载  

    所谓函数重载是指同一个函数名可以对应着多个函数的实现。例如,可以给函数名add()定义多个函数实现,该函数的功能是求和,即求两个操作数的和。其中,一个函数实现是求两个int型数之和,另一个实现是求两个浮点型数之和,再一个实现是求两个复数的和。每种实现对应着一个函数体,这些函数的名字相同,但是函数的参数的类型不同。这就是函数重载的概念。函数重载在类和对象的应用尤其重要。
  函数重载要求编译器能够唯一地确定调用一个函数时应执行哪个函数代码,即采用哪个函数实现。确定函数实现时,要求从函数参数的个数和类型上来区分。这就是说,进行函数重载时,要求同名函数在参数个数上不同,或者参数类型上不同。否则,将无法实现重载。

(二)隐式类型转换

    函数重载时,如果传入参数的类型 与 所有同名的重载函数的形参类型不匹配,编译器讲进行隐式的类型转换,如:

#include <stdio.h>
void f(int a);
void f(long a);
void f(char a);

int main(int argc,char *argv[])
{
 double value = 65.01;
 f(value);
 return 0;
}

void f(int a)
{
 printf("int value=%d\n", a);
}
void f(long a)
{
 printf("long value=%d\n", a);
}
void f(char a)
{
 printf("char value=%c\n", a);
}

在main函数中传入的value为double型,但是并没有与之相匹配的重载函数形参列表,这时候就会发生隐式类型转换,但是以上例子并不能正确运行,原因是在隐式类型转换的时候value自动转换成整形值65,但是char,int,long都属于整型,编译器不知道该调用f(char),f(int),还是f(long),由于程序运行路径具有可预知的唯一路径,编译器不能帮程序设计者决定使用那个函数,所以不能通过编译。

 

如果想强制转换,则可以使用 f(static_cast<long>(value));
这种形式。其中,使用了static_cast进行了明确的类型转换

  评论这张
 
阅读(266)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017