一,常量成员函数的定义
在函数声明的后面加上const,就定义了一个常量成员函数,例如:
class List{
private:
int length;
int weight;
public:
List(int l, int w){
length = l;
weight = w;
}
int getLength() const; //常成员函数
int getWeight(); //非常成员函数
};
在类外定义成员函数时,也要加上const关键字
int List::getLength() const{ //类外定义也要加上const关键字
return length;
}
如果在常量成员函数中修改对象的数据成员,编译时会出错
int List::getLength() const{
return length ++;
}
二,常量成员函数的作用
const成员函数存在的意义在于它能被const常对象调用,而且常对象只能调用常成员函数。
const List list1(10, 10); //定义一个常对象
list1.getLength(); //常对象调用常量成员函数
常对象不能调用非常成员函数,不然在编译时会出错
const List list1(10, 10); //定义一个常对象
list1.getWeight(); //常对象调用非常成员函数,在编译时会出错
非常对象可以调用常成员函数
List list1(10, 10); //定义一个非常对象
list1.getLength(); //非常对象调用常成员函数
三,如何让一个const成员函数具有修改对象数据成员的能力
有些时候,我们却必须要让const函数具有修改某个成员数据值的能力。比如一些内部的状态量,对外部用户无所谓,但是对整个对象的运行却大有用处。遇到这种问题,我们可以把一个成员数据定义为mutable(多变的),它表示这个成员变量可以被const成员函数修改却不违法,例如:
class List{
private:
mutable bool is_valid;
public:
void checkList() const{
if(is_valid){
is_valid = false;
} else {
is_valid = true;
}
}
};