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

  • 相关阅读:
    668. Kth Smallest Number in Multiplication Table
    658. Find K Closest Elements
    483. Smallest Good Base
    475. Heaters
    454. 4Sum II
    441. Arranging Coins
    436. Find Right Interval
    410. Split Array Largest Sum
    392. Is Subsequence
    378. Kth Smallest Element in a Sorted Matrix
  • 原文地址:https://www.cnblogs.com/huangjacky/p/1620566.html
Copyright © 2020-2023  润新知