c++共用数据的保护

c++共用数据的保护,第1张

既要使数据能在一定范围内共享,又要保证他不被任意修改,这时可以把有关的数据定义为常量。

常对象

1.定义常对象的形式

类名 const 对象名(实参表)
const 类名 对象名(实参表)

2.常对象只能调用它的常成员函数,这是为了防止调用普通函数时修改常对象中数据成员的值

const Time t1(10,15,36)
t1.get_time;//非法

补充:

如果get_time普通成员函数并未修改常对象的值为什么也不允许呢?

1.因为编译系统会充分考虑可能出现的情况,对不安全因素进行拦截

为什么编译系统不专门检查一下函数的代码,查看是否修改了常对象的值呢?

1.因为实际上函数的定义与声明可能不在同一个源程序文件中,而编译则是以一个源程序文件为单位的,无法检测出两个源程序文件之间是否存在矛盾,如果有错,只有在连接或者运行阶段才会报错

3.在实际需求中有时也会修改常对象的数据成员,即在声明数据成员是在前面加上mutable

常数据成员

只有通过构造函数的参数初始化列表对常数据成员进行初始化,任何其他函数都不能对常数据成员赋值

常成员函数:

如果将成员函数声明为常成员函数,则只能引用本类中的数据成员,而不能修改它们,例如只能用于输出数据

void get_time()const;

类型名 函数名(参数表)const

const是函数类型的一部分(在声明和定义时都应有const关键字,在调用时不必有const)

 1.常对象不能调用普通通成员函数

2.常成员函数不能调用另一个非const成员函数

指向对象的常指针的指针变量

将指针变量声明为const型,即使其指向位置不变

形式:类名*const 指针变量名

Time t1;

Time* const ptr1=t1;

注意:指向对象的指针不可改变,指向对象的值可以改变

const指针可以指向:1.常变量2.一般变量变量

const指针在指向一般变量期间,变量具有常变量的特性而不是就是常变量

指向对象的指针在形式上有区分:

Time*const p;//指向对象的常指针变量

const Time*p;//常对象的指针变量

规则:

当希望调用函数时对象的值不被修改,就应该把形参定义为为指向常对象的指针变量,同时用对象的地址作实参(对象可以是const或者不是)

对象的常引用:

引用:一个变量的别名,实际上就是引用一个指针变量来存放该变量的地址

总结:在c++面向对象程序设计中,经常用到常指针和常引用,这样既能保证数据安全,在调用函数时又不必建立实参的拷贝

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/674955.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-19
下一篇 2022-04-19

发表评论

登录后才能评论

评论列表(0条)

保存