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

posted @ 2009-12-09 20:40  HuangJacky  阅读(1821)  评论(5编辑  收藏  举报
AdminLogin