Chinaunix首页 | 论坛 | 博客
  • 博客访问: 482422
  • 博文数量: 120
  • 博客积分: 1853
  • 博客等级: 上尉
  • 技术积分: 1177
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-22 22:40
文章分类

全部博文(120)

文章存档

2013年(16)

2012年(104)

分类: C/C++

2012-06-01 16:23:57

          出现在相同作用域中的两个函数,如果具有相同的名字而形参表不同,则称为重载函数(overload function)。
          相同作用域:意味着重载函数是根据作用域来分的。
          相同的名字而形参列表表不同:意味着与可以返回的类型无关,返回类型可以相同也可以不同。重点在于名字和形参列表。

          重载函数的三步骤:(1).候选函数(函数名相同的)(2).选择可行函数(根据参数个数相同和类型能匹配或者能隐式转换,如果没有找到可行函数,则调用失败)(3).寻找最佳匹配(如果有的话,这一步也可能出现调用错误,编译器将提醒有二义性):最佳的意思是实参类型与形参类型越接近则匹配越佳

含有多个形参的重载确定:如果满足有且仅有一个函数满足下列条件,则匹配成功:
(1).其每个实参的匹配都不劣于其他可行函数的需要的匹配
(2).至少有一个实参的匹配优于其他可行函数的匹配
否则就是有二义。

我们不能通过形参以值传递时,形参是否为const来进行重载,这是造成的是重复声明(redeclaration)。
重复声明(redeclaration)的两个例子:(1).int calc(int ,int) 和 int calc(const int, const int);
                                                          (2).int cal(char* ,char *) 和 int calc(char *const , char *const);

仅当形参是引用和指针时,形参是否为const才有影响。因为别的类型是用值传递的方式传递,所以会造成重复定义。所以RECORD lookup(Account &) 和RECORD lookup(const Account &) 不是重复定义,而是重载。


阅读(866) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~