设为首页 加入收藏

TOP

1.1.4 编译器调用重载函数的规则
2013-10-07 00:17:44 来源: 作者: 【 】 浏览:63
Tags:1.1.4 编译器 调用 重载 函数 规则

1.1.4  编译器调用重载函数的规则

对于重载函数:

void ShowMessage(const char* Text , int Type)
{
printf("Message: Text=%s,Type=%d\n",Text,Type+1);
}
void ShowMessage(const char* Text ,unsigned int Type)
{
printf("Message: Text=%s,Type=%d\n",Text,Type);
}
调用程序段
{
unsigned char i=0; ShowMessage("ok",i); 
}
会输出什么结果呢?答案如下:
Message: Text=ok,Type=1


因为对参数个数相同的重载函数进行调用时,编译器依次使用下面的规则将实参与形参进行匹配,确定重载函数的调用。

(1)具有与实参类型相同的形参的重载函数。

(2)转换实参,将T转换为T&,或T&转换为T,或T转换为const T,然后寻找形参类型匹配的重载函数(T为某数据类型)。

(3)实参进行标准的类型转换,如char→int→unsigned int,然后寻找形参类型匹配的重载函数。

(4)使用构造函数转换实参,使其与某一重载函数匹配。例如,如果类A有构造函数A(int),那么int型的实参可以被编译器转换为类A的临时对象。

(5)使用类型转换函数进行转换,使其与某一重载函数匹配。

显然,上述例子符合第3种情况。又如对于重载函数:

void ShowMessage(const char* Text ,const char* Caption)
{
printf("Message: Text=%s,Caption=%s\n",Text,Caption);
}

void ShowMessage(const char* Text ,unsigned int Type)
{
printf("Message: Text=%s,Type=%d\n",Text,Type);
}

调用语句
 ShowMessage("ok",0);
会产生编译错误,因为编译器无法判断第二个实参是空字符串NULL,还是整数0。可见,重载函数的定义和调用会涉及类型转换的细节问题,在设计时要考虑全面。
【责任编辑:夏书 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇1.1.5 在父类和子类中定义重载函数 下一篇1.1.3 重载函数使用实例

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: