一、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变量。