Delphi - 新语法介绍之运算符重载
技术交流,DH讲解
运算符重载一直是个争议的话题,.其实运算符重载就是方便我们而已,不用不会死人,用了方便点儿而已.D7之后的版本也支持运算符重载.我们来看个例子:
如果我们想2个结构体可以相加,比如说 a,b:TPoint;C:=a+b;是吧,多美好的事情呀.
THuangJacky = record A,B,C:Integer; //+ class operator Add(a, b: THuangJacky): THuangJacky; //= class operator Equal(a,b: THuangJacky):Boolean; end; var Form1: TForm1; implementation {$R *.dfm} { TH } class operator THuangJacky.Add(a, b: THuangJacky): THuangJacky; begin Result.A:=a.A + a.A; Result.B:=a.B + b.B; Result.C:=a.C + b.C; end; class operator THuangJacky.Equal(a, b: THuangJacky): Boolean; begin if (a.A=b.A)and(a.B=b.B)and(a.C=b.C) then Result:=True else Result:=False; end; procedure TForm1.btn1Click(Sender: TObject); var a,b,c:THuangJacky; begin a.A:=5;a.B:=6;a.C:=7; b.A:=2;b.B:=3;b.C:=4; //这就是好处 c:=a+b; ShowMessageFmt('%D,%D,%D',[c.A,c.B,c.C]); if not (a=b) then ShowMessage('not equal'); end;我们这里的结构体就可以直接+ 和 = 判断了,方便了那些搞算法的人.哈哈.下面附上所有的运算符:
Implicit | Conversion | Implicit(a : type) : resultType; (封箱) | implicit typecast |
Explicit | Conversion | Explicit(a: type) : resultType; (拆箱) | explicit typecast |
Negative | Unary | Negative(a: type) : resultType; | - |
Positive | Unary | Positive(a: type): resultType; | + |
Inc | Unary | Inc(a: type) : resultType; | Inc |
Dec | Unary | Dec(a: type): resultType | Dec |
LogicalNot | Unary | LogicalNot(a: type): resultType; | not |
BitwiseNot | Unary | BitwiseNot(a: type): resultType; | not |
Trunc | Unary | Trunc(a: type): resultType; | Trunc |
Round | Unary | Round(a: type): resultType; | Round |
Equal | Comparison | Equal(a: type; b: type) : Boolean; | = |
NotEqual | Comparison | NotEqual(a: type; b: type): Boolean; | <> |
GreaterThan | Comparison | GreaterThan(a: type; b: type) Boolean; | > |
GreaterThanOrEqual | Comparison | GreaterThanOrEqual(a: type; b: type): resultType; | >= |
LessThan | Comparison | LessThan(a: type; b: type): resultType; | < |
LessThanOrEqual | Comparison | LessThanOrEqual(a: type; b: type): resultType; | <= |
Add | Binary | Add(a: type; b: type): resultType; | + |
Subtract | Binary | Subtract(a: type; b: type) : resultType; | - |
Multiply | Binary | Multiply(a: type; b: type) : resultType; | * |
Divide | Binary | Divide(a: type; b: type) : resultType; | / |
IntDivide | Binary | IntDivide(a: type; b: type): resultType; | div |
Modulus | Binary | Modulus(a: type; b: type): resultType; | mod |
LeftShift | Binary | LeftShift(a: type; b: type): resultType; | shl |
RightShift | Binary | RightShift(a: type; b: type): resultType; | shr |
LogicalAnd | Binary | LogicalAnd(a: type; b: type): resultType; | and |
LogicalOr | Binary | LogicalOr(a: type; b: type): resultType; | or |
LogicalXor | Binary | LogicalXor(a: type; b: type): resultType; | xor |
BitwiseAnd | Binary | BitwiseAnd(a: type; b: type): resultType; | and |
BitwiseOr | Binary | BitwiseOr(a: type; b: type): resultType; | or |
BitwiseXor | Binary | BitwiseXor(a: type; b: type): resultType; | xor |
我是DH,今天就说到这里.