1. 程式人生 > >常物件只能呼叫常函式成員 c++

常物件只能呼叫常函式成員 c++

關於 常物件只能呼叫常函式成員,不能呼叫非const 函式成員問題,我有點想法


就是我想到的一個角度來解釋為什麼。

你看,常函式成員的特性就是要在函式後面加一個const 修飾關鍵字

以  int getX() const;為例,,將之作解析, 即, int getX(const Coordinate * this);
這次我們重點看的不是 const 修飾誰的問題, 而是 this 的型別問題

顯然,這裡的 this 的型別是 const Coordinate * 型別


也就是說, 這個函式所需要接受的形參型別是 const Coordinate * 型別
問題來了  const Coordinate * 型別 和 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