我正在了解这个指针,它包含调用该函数的当前对象的地址。但是当我从成员函数返回当前对象时,我对这个指针有疑问。
#include<bits/stdc++.h>
using namespace std;
class Point
{
private:
int x,y;
public:
Point(int x,int y)
{
this->x = x;
this->y = y;
//cout<<this<<endl;
}
Point setX(int x)
{
this->x = x;
//cout<<this<<endl;
return *this;
}
Point setY(int y)
{
this->y = y;
//cout<<this<<endl;
return *this;
}
int getX()
{
return x;
}
int getY()
{
return y;
}
};
int main()
{
Point p(10,20);
cout<<p.getX()<<" "<<p.getY()<<endl;
p.setX(1000).setY(2000);
cout<<p.getX()<<" "<<p.getY();
return 0;
}
为什么 p.setX(1000).setY(2000) 只修改 x 的值,而不修改 y 的值?
为什么第二个cout语句的答案是1000 20但它应该是1000 2000?
原因是你的setX()
and setY()
方法返回一个Point
- 他们返回一个copy你的对象。所以你的setY()
设置y
会员给你的临时副本点,不是原来的点。
您可以通过更改以下签名来纠正此问题:
Point setX(int x)
to:
Point& setX(int x)
类似地对于setY()
。您会注意到返回类型现在是Point&
- 参考Point
object.
但请注意,您的类的 getter 和 setter 方法实际上允许处理x
and y
比如公共物品。因此,除非您计划用一些隐式的坐标表示来替换它们(例如,具有距原点的角度+距离),在这种情况下,setter 和 getter 会变得有趣 - 您还可以考虑将您的类简化为:
struct Point { int x, y; }
简单的设计往往是合适的。
最后,与您的具体问题无关,您的代码以一些不合适的行开头......
- 为什么我不应该#include ? https://stackoverflow.com/q/31816095/1593077
- 为什么是“using namespace std;”被认为是不好的做法? https://stackoverflow.com/q/1452721/1593077
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)