第六章_函数_6.4 函数重载

本文介绍了C++中的函数重载概念,强调重载函数必须在形参列表上有所区别,而非仅返回类型。讨论了顶层const与底层const在函数重载中的作用,以及如何通过引用和指针的const属性实现重载。此外,还提到了函数匹配(重载确定)的过程,并指出名字查找发生在类型检查之前。最后,文中提醒在重载函数时应确保它们有实质性的相似操作。
摘要由CSDN通过智能技术生成

6.4 函数重载(overload)

如果同一作用域内的几个函数名字相同但是形参列表不同,称之为重载函数。

定义重载函数

对于重载的函数来说,它们应该在形参数量或形参类型上有所不同。

不允许两个函数除了返回类型外其他所有要素都相同。

判断两个形参的类型是否相异

有时候两个型形参列表看起来不一样,但实际上是相同的

Record lookup(const Account &acct);
Record lookup(const Account&);

重载和 const 形参

顶层 const 不影响传入函数的对象。一个拥有顶层 const 的形参无法和另一个没有顶层 const 的形参区分开来:

Record lookup(Phone); 
Record lookup(const Phone); // 重复声明

如果形参是某种类型的引用或指针,则通过区分其指向的是常量对象还是非常量对象可以实现函数重载,此时的 const 是底层的:

// 对于接受引用或指针的函数来说,对象是常量还是非常量对应的形参不同
// 定义了 4 个独立的重载函数
Record lookup(Account&);
Record lookup(const Account&);
Record lookup(Account*);
Record lookup(const Account*);

最好只重载那些确实非常相似的操作。

const_cast 和重载

// 比较两个 string 对象的长度,返回较短的那个引用
const string &shorterString(const string &s1, const string &s2)
{
    return s1.size() <= s2.size() ? s1 : s2;
}
// 重载非常量版本
string &shorterString(string &s1, string &s2)
{
    auto &r = shoterString( const_cast<const string&>(s1), const_cast<const string&>(s2));
    return const_cast<string&>(r);
}

调用重载的函数

函数匹配是指一个过程,在这个过程中我们把函数调用和一组重载函数中的某一个关联起来。函数匹配也叫做重载确定。

6.4.1 重载与作用域

名字查找发生在类型检查之前。

如果我们在内层作用域中声明名字,它将隐藏外层作用域中声明的同名实体。

在不同作用域中无法重载函数名。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值