课程
/后端开发
/C++
/C++远征之封装篇(下)
没看懂,this指针要求读写权限都具有这个结论怎么得到的,还有为啥coordinate的对象只有读权限呢?
2015-08-07
源自:C++远征之封装篇(下) 5-2
正在回答
楼上说的是正确的,这个和之前讲的const是一致的,比如:
const int A;
int *p=&A;
这个就是错误的,因为A已经设置为常量,而指针p是可以读写的,用一个权限大的指针p去指向一个权限小的A,是不可以的,会有风险。
coordinate的对象被const修饰,变成了常对象,那么指向它的指针this也必须变成常指针,否则就有改变常对象值得风险,因此成员函数内容无论是否改变了常对象的值,都要变成常成员函数,这也就是为什么getX()和getY()要变成常成员函数getX() const和getY()const
如果不加 const 修饰就是一般情况下,this 是具有读写权限的,但是加了const修饰他就只能读而不能写 了,因为Coordinate 对象用const修饰了,那么他就只能读不能写了,也就要求他的隐含参数this只能是const也就是只能有读权限,如果此时不去修改this的权限,他就是具有读写权限,这和Coordinate只具有读权限是矛盾的,变异的时候就会报错
单纯的this指针具有读写权限的,也就是通过可以this改变对象,但是声明const coordinate之后,这个对象是不能改变的,相应的也不能通过this指针来改变的这个对象的值,这时候对象只有读权限
灵魂火
举报
封装--面向对象三大特征之一,通过案例让C++所学知识融会贯通