class a
void fun1() const
};//error: assignment of member 'a::a' in read-only object
class a
void fun1() const
};//error: passing 'const a' as 'this' argument of 'void a::fun()' discards qualifiers [-fpermissive]|
這是為什麼呢?
因為我們會為每個成員函式傳入乙個隱式的this指標,這個指標的型別是a *const(不能改變指向物件的位址)。this指標仍遵循初始化規則,即我們不能將this指標繫結到乙個常量物件上去。所以我們不能在乙個常量物件上呼叫普通的成員函式。所以我們有時需要將this指標宣告為指向常量的常量指標。c++的做法是將const放在成員函式的引數列表後,例如:
void function() const {}
此時this的型別是const a *const,我們稱該函式為常量成員函式。所以常量成員函式不能改變呼叫它的物件的內容。 常量成員函式
參考 常量成員函式宣告 如 int get const 規則 1.常量成員函式不修改物件。2.常量成員函式在定義和宣告中都應加const限定 3.非常量成員函式不能被常量成員函式呼叫,但建構函式和析構函式除外。4.常量 const物件 物件只能呼叫常量成員函式。const物件的資料成員在物件壽命週期...
常量物件與常量成員函式
常量物件與常量成員函式來防止修改物件,實現最低許可權原則。可以用關鍵字const來指定物件是不可修改的,任何修改該物件的企圖,都會導致編譯錯誤。例如 const time noon 12,0,0 宣告乙個 time 類的常量物件 noon 並將它初始化為中午 12點。c 不允許在常量物件上呼叫成員函...
常量成員函式與常量物件
一 非常量物件可以訪問類的普通成員函式和常量成員函式 include using namespace std class stack void push int nelem intpop int getcount const 常量成員函式 int main 二 常量物件只能訪問常量成員函式,不能訪問...