运算符重载
函数重载
例题:
2个同名成员函数,可以重载的是()?
正确答案: B C 你的答案: A B D E (错误)
int A::f() 和double A::f()
void A::f(int) 和void A::f(short)
void A::f() 和void A::f() const
void A::f(int) 和void A::f(const int)
const int A::f() 和int A::f()
解答:A.B.E.选项:
不同的返回值不能区分重载函数,只有函数名、形参个数、形参类型可以
C.选项:
常成员函数的const限定符用于修饰隐式第一形参this
this的原类型为
复制代码
Type * const this;
是一个指针常量
成员函数加上const修饰后 this 的类型变为
复制代码
const Type * const this;
是一个指向常量的指针常量
编译器通过这个手段
令常成员函数作用于一个常量对象
实现了常成员函数内不能修改当前对象的数据成员的语言特性
C++规定
重载函数的指针形参
如果要以const进行区分
只有当修饰的const为底层const
而非顶层const时才可以区分
也就是说
const必须修饰指针指向的对象而非指针本身
所以假如this指针是由原类型变为
复制代码
Type * this;
那么是不能区分该参数的
D.选项也是一个很好的顶层const的例子
对于一个普通的非复合类型
其const总是顶层const(修饰本身)
对于一个引用
其const总是底层const(修饰所引用的对象)