C++ const定义常对象

1 共用数据的保护

       C++采取了不少有效的措施以增加数据的安全性,例如,设置private私有属性。但是,有些数据却往往是共享的,例如,实参与形参,变量与引用,数据与其指针等,人们可以在不同的场合通过不同的途径访问同一个数据对象。在某些情况下,可能会误操作,引起数据的改变。那么,C++需要提供更多的机制,保护数据的安全性。

       例如,即要使数据能在一定范围内共享,又要保证它不被任意修改,这时可以使用const关键字,把有关的数据定义为常量。

2 const定义常对象

       在定义对象的时候,指定对象为“常对象”。常对象中的成员变量为常变量,且必须要有初值,如下是一个测试例子:

       此时,编译错误,提示异常信息如下:

       就是在定义 stud 对象的时候,在 student 类后面,添加了const关键字。此时,这个stud对象成为:常对象。

       那么,该stud常对象的数据不可以被修改,甚至调用自己的print()成员函数都不被允许。

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

类名 const 对象名[(实参列表)]

也可以把const写在最左面:

const 类名 对象名[(实参列表)]

二者等价。

如果一个对象被声明为“常对象”,则不能调用该对象的非const型的成员函数,除了由系统自动调用的隐式的构造函数和析构函数。

       所以,在上面的例子中,定义stud常对象的时候,可以调用student类的构造函数。但是,print()成员函数不是const类型,所以,不可以正常调用。

       C++提供的这个常对象机制,是为了防止这些函数会修改常对象中成员变量的值。

       编译系统只检查函数的声明,只要发现调用了常对象的成员函数,而且,该函数未被声明为const,就报错,提请编程者注意。

       那么,怎么样才能引用常对象中的成员变量呢?很简单,只需将该成员函数声明为const即可,如:

void print() const  //将函数声明为const类型

       这表示print () 是一个 const 类型的函数,即常成员函数。常成员函数可以访问常对象中的成员变量,但仍然“不允许修改”常对象中的成员变量的值。

       有时在编程时有要求,一定要修改常对象中的某个成员变量的值(例如类中有一个用于计数的变量 count,其值应当能不断变化),ANSI C++考虑到实际编程时的需要,对此作出了特殊的处理,对该成员变量声明为 mutable ,如:

mutable int count;  //把count 声明为可变的成员变量

这样,就把 count 声明为“可变的成员变量”,这样就可以声明为const的成员函数来修改它的值。如下是测试的例子:

       程序的运行结果如下:

       可以看到,把print()声明为const类型,那么, stud.print()函数的调用就正常。而且,把student类的成员设置为 mutable类型,那么, student类对象的name, addr等成员变量可以被修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

韦凯峰Linux编程学堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值