[疑难] 操作符重载的困惑
yntcsb
2009-04-18
我编了一个小程序, import tango.io.Stdout; class Point{ private: int x,y; public: this(int a=0,int b=0){ x = a; y = b; } void print(){ Stdout.formatln("x是{}, y是{}",x,y); } Point opAdd(Point a){ x += a.x; y += a.y; return this; } Point opSub(Point a){ x -= a.x; y -= a.y; return this; } } int main() { Point a = new Point(3,2); Point b = new Point(1,5); Point s = a+b;//预期x为3,y为7,实际输出也正常 s.print; Point c = a-b; c.print;//预期x为2,y为-3,实际输出为x是3,y是2,在前面a+b的时候改变了a的值 return 0; }
请问各位,如何让 Point s = a+b; 这行代码计算时不改变a的值。
|
|
xgene
2009-04-19
Point s = a+b实际上s,a指向的是同一个对象,你说变不变, opAdd之内新建一个Point,再返回,就不会变了
|
|
yntcsb
2009-04-19
原来如此,明白了。 |
|
oldrev
2009-04-19
重载为 static 的
|