首页 > 代码库 > 对象的常指针与对象的常引用
对象的常指针与对象的常引用
如下所示: 定义一个类
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
所指向的内存空间的数据是否可不可以改变。
对象的常指针与对象的常引用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。