文章目录
这两个问题都要注意二义性
函数重载
目的
定义一族函数,方便使用的程序员
实现
顺序
相容类型
比方说,int、char、bool、enum这堆数据类型就是相容类型,double、float也是相容类型。
实现原理
名称压轧技术
简单来说就是编译前的一种预处理,给每个函数加函数特征再编译
函数特征(重载依据)
参数类型
常指针和常引用也是一种新的类型,但常量不是
在有常指针和指针,常引用和引用的时候。
常量对象优先调用使用常指针、常引用的重载函数
变量对象优先调用使用普通指针、普通引用的重载函数
参数个数
参数顺序
也要配合函数默认参数来考虑二义性
常成员函数与非常成员函数
注意
重载是指在一个作用域内的
不同作用域的就不是重载了,而是覆写
返回值类型不能作为函数特征
重载函数只关心传进去了什么,不关心会返回些什么
常量对象
常量对象只能调用常成员函数
(可以理解成是this指针权限下放问题)
函数默认参数
顺序
默认从右端开始设置函数默认参数,匹配从左端开始
没有被覆盖就是默认参数,被覆盖了就用新传进来的参数
一定要注意二义性
搭配函数重载来看
函数定义和函数声明不一样怎么办?
看函数声明
定义时省略名称
主要是修改函数的时候,可能接口有一个不再需要了,但是为了避免对使用函数的代码改动
函数定义的时候就算省略了这个参数名称,但是使用的时候也必须给出(哪怕它毫无意义了)。