對象的常指針與對象的常引用

以下所示: 定義一個類函數

 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

所指向的內存空間的數據是否可不能夠改變。權限

相關文章
相關標籤/搜索