本文共 607 字,大约阅读时间需要 2 分钟。
今天笔试遇到一道选择题,大致如下:
class A{ int b;public: void func()const{ cout << "a" << endl; } void func(){ cout << "b" << endl; }};则A a; a.func();的结果是什么?a b 还是报错?
我只记得const修饰的函数,可以禁止修改成员函数,也就是说,成员函数此时相当于常量。可是这样重载的函数,会优先调用谁呢?
只有实验才能记得清楚,我调试后发现输出的是b。
可是在考试的时候,并没有电脑让运行,只能用猜的吗?不,可以从重载函数的性质去推断。
重载函数,是指几个函数有相同的标识符,但却对于不同类型参数做出不同的反应,是多态的特性。而这种多态,是编译时期多态,而不是运行期。因为在调用时总能进行类型的判定。所以我可以大胆推断,这个带const修饰的重载函数,也是编译时期决定的。那么它的决定必然有一个因素。
由const修饰符,我们首先想到的是const修饰的变量,那么就可以联想到const修饰的对象。常量修饰的对象,它的成员是不能被外界修改的,因为对外界来说,它是const的。
所以继续推断,之前所说的决定因素,就是这个const:只有常量类型的对象,会调用const的重载函数。
写一段测试代码来验证:
A a; const A b; a.func(); b.func();结果如下:
转载地址:http://ytqws.baihongyu.com/