const 成员函数
const int n = 100;//定义常量
const Test t(10);
const int& ref = n;//const引用
int& ref = n; //Error
const与指针
const int*p;//const出现在*左边,表示*p是常量(*p=200;Error)
int * const p2;//const出现在*右边,表示p2是常量(p2=&n2;Error)
const int* const p3=&n3; //*p3是常量 p3也是常量
在类中,如果有const成员,const成员的初始化只能在构造函数初始化列表中进行
const修饰成员函数,表示该成员函数不能修改对象状态,也就是说它只能访问数据成员,但是不能修改数据成员
#include <iostream>
using namespace std;
class Test
{
public:
Test(int x) : x_(x), outputTimes_(0)
{
}
int GetX() const//const成员函数,不会修改变量的值
{
cout<<"const GetX ..."<<endl;
//x_ = 100;
return x_;
}
int GetX()
{
cout<<"GetX ..."<<endl;
return x_;
}
void Output() const
{
cout<<"x="<<x_<<endl;
outputTimes_++;
}
int GetOutputTimes() const
{
return outputTimes_;
}
private:
int x_;
mutable int outputTimes_;//用mutable修饰的数据成员即使在const对象或在const成员函数中都可以被修改
};
int main(void)
{
const Test t(10);
t.GetX();
Test t2(20);
t2.GetX();
t.Output();
t.Output();
cout<<t.GetOutputTimes()<<endl;
return 0;
}