虽然数据隐藏保证了数据的安全性,但各种形式的数据共享却又不同程度地破坏数据的安全。因此,对于既需要共享又需要防止改变的数据应该声明为常量。因为常在程序运行期间是不可改变的,所以可以有效地保护数据。在第 2章介绍过简单数据型常量。声明对象时也可以用const 进行修饰,称之为常对象。本节介绍常对象、对象的常成员和常引用。常数组和常指针将在第 6 章介绍
常对象
常对象是这样的对象:它的数据成员值在对象的整个生存期间内不能被改变。也就是说,常对象必须进行初始化,而且不能被更新。声明常对象的语法形式为:
const 类型说明符 对象名;
细节 在声明常对象时,把 const 关键字放在类型名后面也是允许的,不过人们更习惯于把 const 写在前面。例如:
class A(
public:
A(int i,intj) :x(i),y(j) {}
private:
int x, y;
};
const A a(3,4); //a 是常对象,不能被更新
与基本数据类型的常量相似,常对象的值也是不能被改变的。在 C++ 的语法中,对基本数据类型的常量提供了可靠的保护。如果程序中出现了类似下面这样的语句,编译时是会出错的。也就是说,语法检查时确保了常量不能被赋值。
const int n=10; //正确,用 10对常量n进行初始化
n=20; //错误,不能对常量赋值
注意 在定义一个变量或常量时为它指定初值叫做初始化,而在定义一个变量或常量以后使用赋值运算符修改它的值叫做赋值,请勿将初始化与赋值混淆。
语法如何保障类类型的常对象的值不被改变呢?改变对象的数据成员值有两个途径:一是通过对象名访问其成员对象,由于常对象的数据成员都被视同为常量,这时语法会限制不能赋值。二是在类的成员函数中改变数据成员的值,然而几乎无法预料和统计哪些成员函数会改变数据成员的值,对此语法只好规定不能通过常对象调用普通的成员函数。可是这样一来,常对象还有什么用呢?它没有任何可用的对外接口。别担心,办法还是有的,在 节中将介绍专门为常对象定义的常成员函数。
以上内容摘自:《C++程序设计基础教程》郑莉 董渊 编著