对象的常指针与对象的常引用
Posted 邓涛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对象的常指针与对象的常引用相关的知识,希望对你有一定的参考价值。
如下所示: 定义一个类
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
所指向的内存空间的数据是否可不可以改变。
以上是关于对象的常指针与对象的常引用的主要内容,如果未能解决你的问题,请参考以下文章