公用数据成员的保护

6.1常对象

定义常对象的一般形式为:

类名 const 对象名 [(实参表)];在定义常对象前,必须同时对之初始化,之后不能再改变

说明:

1)如果一个对象声明为常对象,则通过该对象只能调用它的常成员函数,而不能调用该对象的普通成员函数(除了构造函数和析构函数)。

2)常成员函数可以访问常对象中的数据成员,但仍然不允许修改常对象中的数据成员的值。

3)常对象只保证其数据成员是常数据成员,其值不被改变。不保证成员函数是常成员函数。

如果编程时有要求,一定要修改常对象中的某个数据成员的值,对该数据成员声明为mutable,例如   mutable int count;

这样便可以用声明为const的成员函数来修改它的值。

6.2 常对象成员

6.2.1常数据成员

用const关键字来声明常数据成员,只能通过构造函数的参数初始化表对常数据成员进行初始化,任何其他函数不能对常数据成员进行赋值。

6.2.2常成员函数

声明常成员函数的一般形式为:

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

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

注意:常成员函数不能调用另一个非const成员函数。

6.3 指向对象的常指针

将指针变量声明为const型,这样指针变量始终保持为初值,不能改变,即其指向不变

定义指向对象的常指针变量的一般形式为

类名 *const 指针变量名;

注意:指向对象的常指针变量的值不能改变,即始终指向同一个对象,但可以改变其所指向对象的值。

如果想将一个指针变量固定地与一个对象相联系(即该指针变量始终指向一个对象),可以将它指定为const型指针变量。

往往用常指针作为函数的形参,目的是不允许在函数执行过程中改变指针变量的值,使其始终指向原来的对象。

6.4指向常对象的指针变量

定义指向常变量的指针变量的一般形式为

const 类型名 *指针变量名

说明:

(1)如果一个变量已被声明为常变量,只能用指向常变量的指针指向它,而不能用一般的(指向非const型变量的)指针变量去指向它。

(2)指向常变量的指针变量除了可以指向常变量,还可以指向未被声明为const的变量。此时不能通过此指针变量改变该变量的值。(定义了指向常变量的指针变量p并使它指向c1,并不意味着把c1也声明为常变量,而只是在用指针变量访问c1期间,c1具有常变量的特征,其值不能改变。在其他情况下,c1仍然是普通变量,其值是可以改变的)

(3)如果函数的形参是指向普通(非const)变量的指针变量,实参只能用指向普通(非const)变量的指针,而不能用指向const变量的指针。

(4)指向常对象的指针最常用于函数的形参,目的是保护形参指针所指向的对象,使它在函数执行过程中不被修改。

6.5 对象的常引用

声明常引用,则不能改变引用所指向的变量的值。

在c++面向对象程序设计中,经常使用常指针和常引用作为函数参数。这样既能保证数据安全,使数据不能随意修改,在调用函数时又不必建立实参的拷贝。

6.6 const型数据小结

形式含义
Time const t;常对象,其值在任何情况下都不能改变
void Time:: fun() const常成员函数,可以引用,但不可以修改本类中的数据成员
Time * const p常指针变量,指向不能改变
const Time *p指向常对象的指针变量,不能通过指针来修改对象的值
const Time &t1 = t;对象的常引用,t的值不能修改


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值