[疑难] 操作符重载的困惑

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 的
Global site tag (gtag.js) - Google Analytics