9.6.1 常对象
const指定对象为常对象,凡希望保证数据成员不被改变的对象可声明为常对象。 定义常对象一般形式为: 类名 const 对象名[(实参表)]; 或 const 类名 对象名[(实参表)];
Time const t1 ( 12 , 34 , 46 ) ;
若一对象被声明为常对象,则只能通过该对象调用其常成员函数 ,而不能调用该对象普通成员函数 ,这是为了防止普通成员函数会修改常对象中数据成员的值。
const Time t1 ( 10 , 15 , 36 ) ;
t1. get_time ( ) ;
若要引用常对象中的数据成员,则将该成员函数声明为const即可。
void get_time ( ) const ;
常成员函数可以访问 常对象中的数据成员,但仍不可修改 常对象中数据成员的值。
若一定要修改对象中的某个数据成员的值,则将该数据成员声明为mutable ,之后便可用声明为const的成员函数来修改它的值。
mutable int count;
9.6.2 常对象成员
常数据成员 ·用const来声明常数据成员,其值不能改变,只能通过构造函数的参数初始化表 对常数据成员进行初始化,任何其他函数都不能对常数据成员赋值 。 ·因常数据成员不能被赋值,所以不能采用在构造函数中对常数据成员赋初值的方法,若在类外定义构造函数,因这样写:
const int hour;
Time: : Time ( int h) : hour ( h) { }
常成员函数 ·声明常成员函数的一般形式为 类型名 函数名(参数表)const ·const是函数类型的一部份,在声明与定义函数时都要有此关键字。 ·常对象只保证其数据成员是常数据成员,成员函数必须加const声明才为常成员函数 ·常成员函数不能调用另一个非const成员函数
数据成员
非const的普通成员函数
const成员函数
非const的普通数据成员
可以引用,也可以改变值
可以引用,但不可改变值
const 数据成员
可以引用,但不可以改变值
可以引用,但不可以改变值
const对象
不允许
可以引用,但不可以改变值
9.6.3 指向对象的常指针
将指针变量声明为const型,这样指针变量始终保持为初值,不能改变,即其指向不变。 定义指向对象的常指针变量的一般形式 类名 * const 指针变量名;
Time t1 ( 10 , 12 , 15 ) , t2;
Time * const ptrl;
ptrl= & t1;
ptrl= & t2;
Time * const ptrl= & t1
指向对象的常指针变量的值不能改变,始终指向同一对象,但可改变其所指对象的值
9.6.4 指向常对象的指针变量
定义指向常变量的指针变量的一般形式为 const 类型名 * 指针变量名
如果一个变量已被声明为常变量 ,只能用指向常变量的指针变量指向它 ,而不能用普通指针指向它。
const char c[ ] = "boy" ;
const char * p1;
p1= c;
char * p2= c;
指向常变量的指针变量除可指向常变量,也可指向非常变量(普通变量),但不能通过此指针变量改变该变量值。
char c1= 'a' ;
const char * p;
p= & c1;
* p= 'b' ;
c1= 'b' ;
形参
实参
合法否
改变指针所指向的变量的值
指向普通变量的指针
普通变量的地址
合法
可以
指向普通变量的指针
常变量的地址
非法
/
指向常变量的指针
常变量的地址
合法
不可以
指向常变量的指针
普通变量的地址
合法
不可以