一.常对象:
1.常对象定义:Time const t1(1,2,3)或者const Time t1;
2.常对象不能调用该对象的非const型的成员函数(系统主动调用的构造析构函数除外);
3.常成员函数的声明方法,后面加个const即可: void get_time() const;
4.常对象不能修改对象内的数据成员,如果要修改,只能将数据成员声明为mutable:
mutable int count;
这样就可以用声明为const的成员函数来修改它的值;
二.常数据成员:
1.常数据成员的定义:const int a; 或者 int const a;
2.只能通过构造函数的参数初始化表对常数据成员进行初始化,不能采用在构造函数中对常数据成员赋初值的方法;
class Time
{
public:
Time(int h, int t);
const int hour;
int test;
};
错误构造函数:
Time::Time(int h, int t)
{
hour = h; // hour是常数据成员,非法
test = t;
}
正确方案:
Time::Time(int h):hour(h) // 采用部分初始化列表定义常数据成员,正确
{
test = t;
}
或者
Time::Time(int h):hour(h),tset(t){} // 采用全部初始化列表定义
三.常成员函数:
1.常成员函数不能调用另一个非const成员函数;
2.常成员函数调用数据成员情况:
数据成员 | 非const成员函数 | const成员函数 |
非const的数据成员 | 可以引用,也可以改变值 | 可以引用,但不可以改变值 |
const数据成员 | 可以引用,但不可以改变值 | 可以引用,但不可以改变值 |
const对象的数据成员 | 不允许引用和改变值 | 可以引用,但不可以改变值 |