一、const成员函数
const成员函数只能访问数据成员的值,不能修改对象的状态
class Test
{
private:int getA() const{a = 100;//错误,不能修改const对象状态return a;}
public:int a;
};
二、const对象
如果把一个对象指定为const,就是告诉编译器不要修改它,因此 const对象不能调用非const成员函数
const对象的定义: const 类名 对象名 ( 参数表 );
class Test
{
private:int setA(int a_){a = a_;}int getA(){return a;}
public:int a;
};
int main()
{const Test a;a.setA(10);//错误,不能修改对象状态return 0;
}
三、mutable
在
C++
中,
mutable
也是为了突破
const
的限制而设置的。被
mutable
修饰的变量
(mutable
只能由于修饰类的非静态数据成员
)
,将永远处于可变的状态,即使在一个
const
函数中。
我们知道,假如类的成员函数不会改变对象的状态,那么这个成员函数一般会声明为const。但是,有些时候,我们需要在const的函数里面修改一些跟类状态无关的数据成员,那么这个数据成员就应该被mutalbe来修饰。
例子如下:
class Test
{
public:Test():count(0){}void setA(int a_){a = a_;}int getA(){return a;}void display() const{cout<<a<<endl;count++;cout<<"count:"<<count<<endl;}
private:mutable int count;int a;
};
int main()
{Test a;a.setA(12);a.display();a.display();return 0;
}
这个例子中,我们打印变量的display函数本身不修改对象状态,所以用const修饰。但是如果我们需要统计打印次数这个和对象状态无关的变量的话,我们就需要用mutable修饰count变量。