在C++ 的编程过程中 ,如果既想要数据能自一定范围内被共享 ,又要保证它不被任意修改,可以使用const 也就是把某些有关的数据定义为常量。
常对象
定义对象的时候声明为常对象。必须要赋初值。
在所有的场合中,常对象中的成员的值都是不可以修改的。
例如 const Time t1(10,20,30);
如果对象被声明了常对象,那么任何企图调应常对象中的函数成员的形式都是违法的,编译器都会报错。因而,要把要把需要调用的函数成员也定义为const
如 void GetTime() const ;
这个定义就可以访问常对象的函数成员了。
例外:当要对常对象中的某个数据进行更改时候,(例如常对象中的计数变量 count )这时候要靠虑到编程的特殊性,所以引入了mutable ,
当常对象的某数据成员声明为 mutable int count 的时候,说明这个变量是可以改变的。
常对象成员
常数据成员
用法类似于一般的常变量,用关键字const来声明,常对象成员的值是不能改变的。只是通过构造函数的参数初始化表对常数据成员进行初始化。定义的具体格式是:Time::Time(int h) :hour(h){}只能通过这样的初始化列表来进行初始化。
常成员函数
一般的成员函数只能引用到本类中的非const 成员。也可以修改它们。
但是如果声明为了常成员函数,那么只能够引用到它们 ,但是却不能 修改它们。
const 成员函数可以引用包括:const 数据成员 ,非const数据成员和const的对象的数据成员,但是只是引用均不能改变它们的值。
非const成员函数对 非const数据成员 既可以引用也可以改变值
const数据成员 可引用但是不能改变值
const对象的数据成员 不可引用
常成员函数的应用:
如果在一个类中 ,有些数据成员的值允许改变,另外一些数据成员的值是不允许改变的,那么可以将一部分的数据成员声明为const 另一部分声明为非const ,
如果类中的所有的数据成员的值都是不允许改变的。那么可以把数据成员声明为const。
对于一个常对象 ,常成员函数 只能调用其中的const成员函数,而不能调用非const成员函数。
常函数成员不能调用任何一个非const函数成员
CSDN实例
Code:
1. classCoo
2. {
3. public:
4. Coo() : a(0)
5. {}
6.
7.
8. intgetA()const//常量成员函数
9. {
10. ++a;//编译错误
11. returnthis->a;
12. }
13. private:
14.
15. inta;
16. };
这段代码当然编译不过去。但下面这一段呢?
Code:
1. classCoo2
2. {
3. public:
4.
5. Coo2() : p(newint(0)) {}
6.
7. ~Coo2() {deletep;}
8.
9.
10. intconst getP()const//常量成员函数
11.
12. {
13.
14. p = 1;//编译OK
15.
16. returnthis->p;
17. }
18. private:
19.
20. int* p;
21. };
22. 答案是编译得过去,原因是代码也正确。在语义上,Coo2对象,拥有的是指针,而不是指针所指向的东西
原文链接: https://www.cnblogs.com/rixinren/archive/2010/06/27/1766183.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/12199
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!