1.常量数据成员
类的常量数据成员表示它在某个对象生存期内是常量,即在对象生成时给出常量值,而在此对象生存期内,它的值是不能改变的,只能初始化,不能赋值。同一个类的不同对象,不同对象对应的常量数据成员的值可以不同。类中声明常量数据成员的形式为:
class Test
{
private:
const int size;
...
public:
...
};
常量数据成员的值只能在构造函数中设定。常量只能初始化,即调用构造函数,不能赋值。常量数据成员的初值不能在构造函数的函数体中通过赋值设定,只能在构造函数初始化列表中完成。
2.常量对象
常量对象只能初始化,不能赋值,而且必须要初始化,否则就无法指定常量的值。
比如:
const Test test(1,2);
3.常量对象函数
C++规定:对const对象只能调用const成员函数。任何不修改数据成员的函数都应该声明为const类型。如果在编写const成员函数时,不慎修改了数据成员,或者调用了其他非const成员函数,编译器将指出错误,这无疑会提高程序的健壮性。
常量成员函数的声明是在函数头后面加一个保留字const,const是函数原型的一部分。要说明一个函数是常量,必须在类定义中的成员函数声明时声明它为常量的,同时在成员函数定义时也说明它是常量的。如果仅在类定义中说明,而在函数实现时没有说明,编译器会认为是这两个是不同的函数,是重载函数。
class A {
int x;
public:
A(int i) {x=i;}
int getx() const
{return x;}
};
比如:
//test.h
class test
{
public:
test();
~test();
void display() const;
private:
int member;
int time;
};
//test.cpp
void test::display() const
{
cout << "成员函数值" << member << '\t' << time << endl;
member = 20;//会报错,因为常量成员函数不能修改类的数据成员。
}
写成如下就对了
//test.cpp
void test::display() const
{
cout << "成员函数值" << member+1 << '\t' << time << endl;//没有修改数据成员的值
int a=20;//定义了局部变量,但是没有修改类的数据成员值,不会报错
}
4.常量对象
如果一个对象是类的常量对象,即const test mytest;
,那么类里面定义的可以修改数据成员的函数就不能被该常量对象使用。常量对象只能使用不修改数据成员的成员函数。