技术交流,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,今天就说到这里.