在定义对象时指定对象为常对象。常对象必须要有初值,如<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

Time const t1(12,34,46);                   //t1是常对象

 

这样,在所有的场合中,对象t1中的所有成员的值都不能被修改。凡希望保证数据成员不被改变的对象,可以声明为常对象。

 

定义常对象的一般形式为

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

也可以把const写在最左面:

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

二者等价。

 

如果一个对象被声明为常对象,则不能调用该对象的非const型的成员函数(除了由系统自动调用的隐式的构造函数和析构函数)。例如,对于指向对象成员的指针节中的例子中已定义的Time类,如果有
const Time t1(10,15,36);         //定义常对象t1
t1.get_time( );                   //企图调用常对象t1中的非const型成员函数,非法

 

这是为了防止这些函数会修改常对象中数据成员的值。不能仅依靠编程者的细心来保证程序不出错,编译系统充分考虑到可能出现的情况,对不安全的因素予以拦截。
现在,编译系统只检查函数的声明,只要发现调用了常对象的成员函数,而且该函数未被声明为const,就报错,提请编程者注意。

 

引用常对象中的数据成员很简单,只需将该成员函数声明为const即可。如
void get_time( ) const;         //将函数声明为const
这表示get_time是一个const型函数,即常成员函数。常成员函数可以访问常对象中的数据成员,但仍然不允许修改常对象中数据成员的值。    

 

有时在编程时有要求,一定要修改常对象中的某个数据成员的值,ANSI C++考虑到实际编程时的需要,对此作了特殊的处理,对该数据成员声明为mutable,如
mutable int count;
count声明为可变的数据成员,这样就可以用声明为const的成员函数来修改它的值。