一、常类型的引入
是为了既保证数据共享又防止数据被改动。
二、常数据成员
定义格式:
const 数据类型 数据成员名;
说明:
1. 常数据成员只能通过构造函数用初始化列表进行初始化,而任何其他函数都不能对该成员赋值;
三、常成员函数
说明格式:
类型说明符 函数名(参数表)const;
说明:
1. 在函数实现的部分要带关键字const(因为const是函数类型的一个组成部分);
2. 关键字const可以被用于参与对重载函数的区分;
3. 常成员函数不能更新对象的数据成员,也不能调用该类中的普通成员函数,这就保证了在常成员函数中绝对不会更新数据成员的
值;
4. 常成员函数是常对象惟一的对外接口,这是C++从语法机制上对常对象的保护。
四、常对象
说明形式:
类名 const 对象名[(参数表)]; 或 const 类名 对象名[(参数表)];
说明:
1. 在定义对象时,必须进行初始化,而且不能被更新;
2. 常对象只能调用它的常成员函数,而不能调用普通的成员函数;
3. c++不允许直接或间接地更改常对象的数据成员。
五、程序示例
#include <iostream>
using namespace std;
class KSample
{
private:
const int n; //定义常数据成员
public:
int m;
KSample(int i, int j):n(j) //常数据成员只能用初始化列表进行初始化
{
m = i;
}
void Display(void); //声明普通成员函数Display(void)
void Display(void) const; //声明常成员函数Display(void)
};
void KSample::Display()
{
cout<<"m1 = "<<m<<endl;
cout<<"n1 = "<<n<<endl;
}
void KSample::Display() const
{
cout<<"m2 = "<<m<<endl;
cout<<"n2 = "<<n<<endl;
}
int main()
{
KSample a(30,40);
a.Display();
const KSample b(10,20); //定义常对象
b.Display();
return 0;
}
程序结果:
m1 = 30
n1 = 40
m2 = 10
n2 = 20