C++中共享数据的保护

在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

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月7日 上午11:04
下一篇 2023年2月7日 上午11:10

相关推荐