重载函数

如果两个函数名字相同,并且在相同的域中被声明,但函数的参数表不同(参数的个数不同,或参数的类型不同),则他们就是重载函数。
 
注意:
  • 参数表的比较过程与参数名无关
  • 函数的返回类型不足以区分两个重载函数
  • 如果两个函数的参数表的区别只在于一个是用了typedef定义的类型,另一个是用了于typedef相应的类型,则该参数表不被视为不同。
  • 参数表的比较过程中不考虑const和volatile修饰

一个声明为局部的函数将隐藏而不是重载一个全局域中声明的函数

e.g.

#include <string>

void print(const string & );

void print(double);

 

void fooBar(int ival)

{

  extern void print (int);

  //print("value:");  是错误的,print(const string & )在这个域中被隐藏

  print(ival);

}

using对重载的影响
  用户不能在using声明中为一个函数指定的参数列表
  using声明只是一个声明。由using声明引入的函数就好像在该声明出现的地方被声明一样
  using声明向一个域中引入一个函数,而该函数已经有同名函数且具有相同的参数表,则该声明就是错误的。
  具有相同的名字,但是来自不同名字空间的成员函数都将加载到同一个重载函数集。
e.g.
namespace libs_R_us
{
  extern int max(int,int);
  extern int max(double,double);
 
  extern void print(int);
  extern void print(double);
}
 
namespave IBM
{
  extern void print(float);
}
 
extern void print(const string & ); 
 
using IBM
using libs_R_us::print;    //正确
//using lins_R_us::max(int,int)  是错误的
 
void fooBar(int ival)
{
  print( "Value:");
  print(ival);
  print(1.0f);  //是用的是IBM::print
}
重载函数解析的三个步骤:
  1.确定函数调用考虑的重载函数的集合,确定函数调用中实参表的属性(既实参的个数和类型)
 
2.从重载函数集合中选择函数,该函数可以在(给出实参个数和类型)的情况下用调用中指定的实参进行调用。
根据调用中指定的实参从候选函数中选择一个或多个函数,这些函数成为可行函数。他们的参数个数于调用的参数个数相同或多一点,但是每个多处来的参数都有缺省值,调用中实参和该函数中的实参之间类型作好精确匹配,至少要可以进行转换。
  3.选择于调用最匹配的函数
选择于调用最匹配的函数,称为最佳可行函数(最佳匹配函数),为实现这种匹配,从实参类型到相应的可行函数参数类型的转换被划分等级。


文章来源: http://spaces.msn.com/members/Grisson/Blog/cns!1pdzVqmOhs8O_w1Y7GbtnyFQ!205.entry
posted on 2005-08-12 10:53 海盗 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/Grisson/archive/2005/08/12/213203.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值