先看下面類的定義 (編譯通過):
再看這個類的定義(編譯未通過):
後者錯誤的原意是,用const修飾的成員函式內是不允許改變成員變數的值的,但是返回值是成員變數的引用,就可以通過返回值改變成員變數的值,這就使該const的修飾失去作用。比如定義乙個const修飾的物件:const hand mylefthand; 就可以通過 mylefthand.number() = 11;改變成員變數的值。
所以後者類的宣告是錯誤的,編譯不通過的。
但下面的宣告是沒問題的:
上面的宣告,允許通過:
const hand mylefthand;
mylefthand.number() = 11;
改變成員變數的值。
考慮下面情形,如果類a中含有vector成員,我們要通過該類向vector成員執行新增,刪除等操作,該怎麼辦呢?
這就要用到上面的定義了,如下:
如果用 const vector & colors() const 定義的話,就不能修改vector了,典型的就是不能呼叫push_back方法了。 但是去掉了const修飾的函式卻不能被const修飾的物件呼叫,這怎麼辦? 答案是可以在上面的**中去掉注釋,使兩者並存。也就是定義如下的類:
這與 「過載函式不能只是返回值不同」 並不衝突,因為後者多了const修飾函式,也是一種過載。
例如,下面的**也正確:
補充:const修飾的物件只能訪問const修飾的成員函式,這就要求盡量使用const修飾成員函式,這樣才能保證const修飾的物件也能訪問該函式。
const成員函式和mutable關鍵字
一 const成員函式 class myclass public void fun const private int m nvalue const成員函式內不能修改成員變數的值,也不能呼叫非const成員函式。const物件只能呼叫const成員函式。二 mutable關鍵字 class mycl...
const關鍵字修飾類
include using namespace std if 0 1 const修飾資料成員 成員函式 類物件 2 修飾資料成員的時候 只能在形參列表裡面初始化。被const修飾的資料成員,不能被修改 3 修飾成員函式 位置 函式宣告之後,實現體之前。要求在宣告和定義處都要有const 意義 con...
const關鍵字在c 的用法
作用 1 欲阻止乙個變數被改變,可使用const,在定義該const變數時,需先初始化,以後就沒有機會改變它了 2 對指標而言,可以指定指標本身為const,也可以指定指標所指的資料為const,或二者同時指定為 const修飾指標,注意 const只限定它前面的字元 函式中使用const 例子 常...