以下所示: 定義一個類函數
1 class Coordinate { // 座標類 2 public: 3 Coordinate(int x, int y); 4 ~Coordinate(void); 5 6 void SetX(int x); 7 void SetY(int y); 8 void PrintInfo(void) const; // 常成員函數 9 int GetX(void); 10 int GetY(void); 11 private: 12 int m_iX; 13 int m_iY; 14 };
咱們經過以下的方法實例化對象:spa
1 int main(void) 2 { 3 Coordinate coor1(1, 2); 4 const Coordinate &coor2 = coor1; // 常對象引用 5 const Coordinate *pCoor = &coor1; // 常對象指針 6 7 coor1.PrintInfo(); 8 coor2.GetX(); // 這種調用方法是錯誤的 9 pCoor->GetY(); // 這種調用方法也是錯誤的 10 11 return 0; 12 }
編譯出錯,編譯結果顯示以下:指針
對於coor1來講,它調用PrintInfo函數是沒有問題的;可是對於coor2調用GetX函數來講,這就code
會有問題,因爲coor2是常對象引用,常對象引用只有讀權限,而GetX在定義的時候要求參數必須對象
有讀寫權限,這就是問題的所在;同理pCoor->GetY也是會出問題的,由於pCoor是一個常對象指針blog
,那麼對象一樣只有讀權限。內存
若是咱們將coor2和pCoor改爲以下所示變沒有問題了編譯
1 int main(void) 2 { 3 Coordinate coor1(1, 2); 4 Coordinate * const pCoor = &coor1; 5 6 coor1.PrintInfo(); 7 pCoor->GetY(); 8 9 return 0; 10 }
改爲這樣以後將直接修飾pCoor,使得pCoor指針不可以指向其餘的內存空間,而不會限制pCoorclass
所指向的內存空間的數據是否可不能夠改變。權限