出现在相
同作用域中的两个函数,如果具有
相同的名字而形参表不同,则称为重载函数(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 &) 不是重复定义,而是重载。
阅读(871) | 评论(0) | 转发(0) |