TSL语言基础 > Object TSL > 算符重载

算符重载的案例    

  • 下边是一个复数的例子,范例中重载了+和<运算符:
    Type Tcomplex=class
     vReal;//实部
     vImaginary;//虚部
     function Operator +(data); //单参数,即只支持obj+10,不支持10+obj
     begin
      r:=new Tcomplex();
      if ifnumber(data) then
       r.vReal:=vReal+data
      else begin
       r.vReal:=vReal+data.vReal;
       r.vImaginary:=vImaginary+data. vImaginary;
      end;
      return r;
     end;
     function Operator<(data,isLeft); //双参数,支持obj<10的判断,也支持10<obj的判断
    End;
    Function Operator Tcomplex. <(data,isLeft);//由于.<本身是一个操作符,因此此处的.和<必须用空格分开
    Begin
     //echo "isLeft:",isLeft;//对象是否在左边
     If ifnumber(data) then
      V:=vReal<data
     else
      V:= (vReal^2+vImaginary^2)<data.vReal^2+data.vImaginary^2;
     If not isLeft then V:=not V;
     Return V;
    End;

    调用测试:
    t1:=new TComplex();
     t1.vReal:=10;
     t1.vImaginary:=100;
     t2:=t1+10; //不支持t2:=10+t1;
     echo "t2.vReal:",t2.vReal;

     echo "t1<5:",t1<5;
     echo "t1<300:",t1<300;
     echo "5<t1:",5<t1;//对象在右边

    打印结果:
    t2.vReal:20
    t1<5:0
    t1<300:1
    5<t1:1