共用数据的保护

C++有不少措施保护数据的安全性,如private保护类的数据成员等。但对于一些共用的数据,如函数实参与形参等,我们可以在不同的场合通过不同的途径访问同一个数据对象。有时不经意的误操作会改变数据的值。

一、常对象

既要使数据能在函数间共享,又要保证它不被任意修改,可以使用const限定即把数据定义为只读的。
在定义对象时使用const限定,称它为常对象

定义的一般形式为:

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

或 const 类名 对象名(实参列表);

如: const student stu1;
     student const stu2 (20060102,“李四”,90) ;
1)常对象中的数据成员均是const的,必须要有初值。无论什么情况下,常对象中的数据成员都不能被修改。

2)除了默认构造函数和默认析构函数外,常对象只能调用常成员函数。
如:stu1.num=20060103;//error
   stu1.display( );//error
3)在实际编程中,有时一定要修改常对象中的某个数据成员的值可以将数据成员声明为mutable(可变的)来修改它的值。
声明形式为:
mutable  数据成员类型  数据成员名列表;

如: mutable int num;//可变的数据成员

二、常数据成员

在定义成员时使用const限定,称它为常数据成员

定义的一般形式为:
const  类型名  成员名;
如: const int num;
说明:常数据成员的值,只能通过构造函数的初始化表进行初始化。

三、常成员函数

在定义成员函数时使用const限定,称它为常成员函数。
定义的一般形式为:
返回类型 函数名(形式参数列表) const

{  函数体  }

说明:
1)常成员函数只能引用本类中的数据成员,不能改变其值。
2)无论声明还是定义常成员函数都要加const关键字。常成员函数可以访问const数据成员,也可以访问非const的数据成员。const数据成员可以被const成员函数访问,也可以被非const的成员函数访问。

数据成员

非常成员函数

常成员函数

非常数据成员

允许访问,可以修改

允许访问,不能修改

常数据成员

允许访问,不能修改

允许访问,不能修改

常对象数据成员

不允许访问和修改

允许访问,不能修改

关于常成员函数的说明:
1)在一个类中,如果有些数据成员的值允许修改,另一些数据成员的值不允许修改,可以将一部分数据成员声明为const(常数据成员),使得其值不能被修改。而普通的成员函数可以修改普通的数据成员,但只能访问常数据成员的值。
2)如果要求所有数据成员的值都不允许改变,可以将对象声明为const的(常对象),则只能用const成员函数访问数据成员.且不能修改其值
3)如果定义了一个常对象,只能调用其中的const成员函数,而不能调用非const成员函数。如果需要访问常对象中的数据成员,可将常对象中所有成员函数都声明为const成员函数,但应确保在函数中不会修改对象中的数据成员。
4)常对象中的成员函数不一定是常成员函数。如果在常对象中的成员函数未加const声明,C++把它作为非常成员函数处理。
5)常成员函数不能调用另一个非常成员函数。

四、指向对象的常指针

常指针是const的不能改变指向,但常指针所指向的对象却不一定是const的

指向对象的常指针定义形式:

类名 *const 指针变量名;
如: student stu;
      student *const p= &stu ;
通常,使用常指针作为函数的形参,目的是不允许在函数执行过程中改变指针变量的值,使其始终指向原来的对象。如果在函数执行过程中试图修改常指针形参的值,就会出现编译错误。

指向常对象的指针变量定义形式:
const  类名  *指针变量名;
如: const student*p;//指针变量指向的对象为const

说明:指向常对象的指针变量,是不能通过它改变所指向的对象的值,但是指针变量本身的值是可以改变的,因此可以在定义时不初始化。

指向对象的常指针与指向常对象的指针的区别:
student *const p =&d;
const student *p;
1)如果一个对象已被声明为常对象,只能用指向常对象的指针变量指向它。

2)如果定义了一个指向常对象的指针变量,即使它指向一个非const的对象,其指向的对象也是不能通过指针来改变的。

3)指向常对象的指针作函数形参,目的是在保护形参指针所指向的对象,使它在函数执行过程中不被修改。使用常指针作为函数的形参,目的是不允许在函数执行过程中改变指针变量的值,使其始终指向原来的对象。如果在函数执行过程中试图修改常指针形参的值,就会出现编译错误。

五、对象的常引用

在C++程序中,经常用对象的常指针和常引用作函数参数。这样既能保证数据安全,使数据在函数中不能被随意修改,在调用函数时不必传递实参对象的副本,大幅减少函数调用的空间和时间的开销。

对象常引用定义形式:
const  类名  &引用变量名;
 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值