常物件只能呼叫常函式成員 c++
阿新 • • 發佈:2019-02-17
關於 常物件只能呼叫常函式成員,不能呼叫非const 函式成員問題,我有點想法
就是我想到的一個角度來解釋為什麼。
你看,常函式成員的特性就是要在函式後面加一個const 修飾關鍵字
以 int getX() const;為例,,將之作解析, 即, int getX(const Coordinate * this);
這次我們重點看的不是 const 修飾誰的問題, 而是 this 的型別問題
顯然,這裡的 this 的型別是 const Coordinate * 型別,
也就是說, 這個函式所需要接受的形參型別是 const Coordinate * 型別
問題來了 const Coordinate * 型別 和 Coordinate * 型別,到底是什麼關係,還是沒有關係的兩種型別???
我想說的就是, 假定
因為 常物件的地址是const Coordinate * 型別,而成員函式呼叫的時候必須接收所在物件的指標
也就是說,常物件中的成員函式必須接收常物件的地址,也就是 const Coordinate * 型別地址
為此,要符合型別的匹配,成員函式必須要用 const Coordinate * 型別的形參來接收,
所以必須將成員函式修飾為 const ,即常物件函式
只有這樣才能滿足型別的匹配!!!
void test()const
{
cout << "jack is a good boy!!!" << endl;
}
void test ()
{
cout << "via via via " << endl;
}
/*這兩個函式互為過載,可見 const Coordinate * 和 Coordinate * 確實不一樣!!!*/
Jack_Lu