一、常数据成员
1、定义
用const修饰的数据成员
const int hour;//定义const为常数据成员
2、初始化
不能采用在构造函数中对常数据成员进行赋初值的方法,因为常数据成员是不能被赋值的。
构造函数只能用参数初始化列表对常数据成员进行初始化
Time ::Time (int h):hour(h){}//通过参数初始化表对常数据成员进行初始化
3、访问规则
- 普通成员函数可以引用常数据成员,但是不能修改其值
- 常成员函数可以引用常数据成员,但是不能修改其值
二、常成员函数
1、定义
常成员函数是指由const修饰符修饰的成员函数
void getTime() const;//在声明和定义常成员函数时都要有const关键字,在调用时不必加
2、访问规则
- const对象只能调用const成员函数
- const成员函数可以引用常数据成员和普通数据成员,但是不能修改其值
- const成员函数只能调用const成员函数,不能调用普通成员函数
- 普通对象可以调用const成员函数
3、本质
常成员函数的const实际上修饰的是this指针使之成为常this指针
void getTime(const Time *const this)
普通成员函数编译完是
void getTime(Time *const this)
4、注意
- 普通的成员函数和常成员函数互为重载
- 任何不修改成员数据的函数都应该声明为const函数,这样有助于提高程序的可读性和可靠性
- const成员函数表示该成员函数只能读类数据成员,而不能修改类成员数据。定义const成员函数时,把const关键字放在函数的参数表和函数体之间。有人可能会问:
为什么不将const放在函数声明前呢?因为这样做意味着函数的返回值是常量,意义完全不同。