首页 > 代码库 > 对象的常指针与对象的常引用

对象的常指针与对象的常引用

如下所示: 定义一个类

 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 };

我们通过如下的方法实例化对象:

 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函数来说,这就

会有问题,由于coor2是常对象引用,常对象引用只有读权限,而GetX在定义的时候要求参数必须

有读写权限,这就是问题的所在;同理pCoor->GetY也是会出问题的,因为pCoor是一个常对象指针

,那么对象同样只有读权限。

如果我们将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指针不能够指向其他的内存空间,而不会限制pCoor

所指向的内存空间的数据是否可不可以改变。

 

对象的常指针与对象的常引用