const修飾類的成員函數



《Effective C++》裏面說,儘量使用const,const修飾變量一般有兩種方式:const T *a,或者 T const *a,這兩者都是一樣的,主要看const位於*的左邊還是右邊,這裏不再贅述,主要來看一下當const修飾類的成員函數時,成員函數有什麼特點。


類的成員函數後面加 const,表明這個函數不會對這個類對象的數據成員(準確地說是非靜態數據成員)作任何改變。

在設計類的時候,一個原則就是對於不改變數據成員的成員函數都要在後面加 const,而對於改變數據成員的成員函數不能加 const。所以 const 關鍵字對成員函數的行爲作了更加明確的限定:有 const 修飾的成員函數(指 const 放在函數參數表的後面,而不是在函數前面或者參數表內),只能讀取數據成員,不能改變數據成員;沒有 const 修飾的成員函數,對數據成員則是可讀可寫的。

除此之外,在類的成員函數後面加 const 還有什麼好處呢?那就是常量(即 const)對象可以調用 const 成員函數,而不能調用非const修飾的函數。


注意:兩個成員函數如果只是常量性不同,是可以被重載的

例如:

class A

{

public:

    void f()

    {

        cout<<"non const"<<endl;

     } 

    void f() const

    {

        cout<<" const"<<endl;

     } 

};

微軟筆試第二題正是考這個,const 對象調用f() const,非const對象調用 f()


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章