const关键字在类的成员函数上的应用(1)
来源:互联网 发布:linux 查杀进程 编辑:程序博客网 时间:2024/05/24 03:06
先看下面类的定义 (编译通过):
再看这个类的定义(编译未通过):
后者错误的原意是,用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修饰的对象也能访问该函数。
- const关键字在类的成员函数上的应用(1)
- const关键字在类的成员函数上的应用(2)
- const关键字类成员函数
- const成员函数的一个应用实例
- 类的const成员函数(4)
- 类的 const 成员函数
- 类的const成员函数
- 类的const成员函数
- 类的const成员函数
- const成员函数、inline成员函数、static成员函数中关键字的位置
- C++的const类成员函数(解释为什么非const成员函数不能访问const对象的数据成员)
- 笔记:c++的const类成员函数(1)
- const 只能放在类成员函数的后面
- C++成员函数末尾const关键字的作用
- 在const成员函数中强制的去掉const
- 修饰类成员函数的几个关键字:inline, const, explicit, static, virtual
- 常成员函数:Const类限定的成员函数
- 类的static成员函数和const成员函数
- How to impove moral of your team
- JSTL标签库学习总结
- linux 多进程编程
- 《C和指针》学习笔记
- JSTL标签库学习总结
- const关键字在类的成员函数上的应用(1)
- linux Shell: 定时清理指定目录下大于指定大小、指定文件名的文件?
- 前台调用后台方法
- JSTL标签库学习总结
- vb6 打印
- DataSnap与JSON序列化(4)
- const关键字在类的成员函数上的应用(2)
- Linux内核源代码中的Makefile分析
- HtmlParser初步研究(转帖加其他参考理解)