以下所示: 定义一个类函数
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
所指向的内存空间的数据是否可不能够改变。权限