const修饰的函数

今天笔试遇到一道选择题,大致如下:

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();

结果如下:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值