const关键字在类的成员函数上的应用(1)

 

先看下面类的定义 (编译通过):

 

 

再看这个类的定义(编译未通过):

 

 

后者错误的原意是,用const修饰的成员函数内是不允许改变成员变量的值的,但是返回值是成员变量的引用,就可以通过返回值改变成员变量的值,这就使该const的修饰失去作用。比如定义一个const修饰的对象:const Hand myLeftHand; 就可以通过 myLeftHand.number() = 11;改变成员变量的值。

所以后者类的声明是错误的,编译不通过的。

但下面的声明是没问题的:

 

 

上面的声明,允许通过:

const Hand myLeftHand;

myLeftHand.number() = 11;

改变成员变量的值。

 

考虑下面情形,如果类A中含有vector成员,我们要通过该类向vector成员执行添加,删除等操作,该怎么办呢?

这就要用到上面的定义了,如下:

 

如果用 const vector & colors() const { return _colors; } 定义的话,就不能修改vector了,典型的就是不能调用push_back方法了。 但是去掉了const修饰的函数却不能被const修饰的对象调用,这怎么办? 答案是可以在上面的代码中去掉注释,使两者并存。也就是定义如下的类:

 

 

 

这与 “重载函数不能只是返回值不同” 并不冲突,因为后者多了const修饰函数,也是一种重载。

 

例如,下面的代码也正确:

 

 

 

补充:

const修饰的对象只能访问const修饰的成员函数,这就要求尽量使用const修饰成员函数,这样才能保证const修饰的对象也能访问该函数。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值