【发布时间】:2017-10-18 01:20:15
【问题描述】:
我现在正在上课
但是调用方法链有问题(这里是代码
class Point{
public:
int x;
int y;
Point(int i , int j);
Point incrementX();
Point incrementY();
void print();
};
Point::Point(int i, int j){
x = i;
y = j;
}
Point Point::incrementX(){
x++;
return(*this);
}
Point Point::incrementY(){
y++;
return(*this);
}
void Point::print(){
cout << "(" << x << "," << y << ")" << endl;
}
void Q11(){
Point a(2,3);
//(3,4)
a.incrementX().incrementY().print();
//(3,3)why 33 here ??
a.print();
}
我很困惑为什么最后一个代码a.print() 给出了(3,3)
我尝试在方法中打印出this的地址
我在调用incrementX()和incrementY()时发现这两个地址不同
我的猜测是incrementX()访问了类,但是调用incrementY()时类被占用了。所以它会在堆中复制类,然后incrementY() 更改副本中的 y...
所以(3,4) 是通过副本打印的,(3,3) 是通过实际类打印的...
【问题讨论】: