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