Delphi8の演算子オーバーロード

買ってからなんにもしないのもアレなので、試してみた。

program OverloadSample;

{$APPTYPE CONSOLE}

uses

SysUtils;

type

TVector2D = class

private

x, y: Integer;

public

constructor Create(xx, yy: Integer);

class operator Add(a, b: TVector2D): TVector2D;

class operator Multiply(a: TVector2D; b: Integer): TVector2D;

{ とりあえずこんなところで }

end;

constructor TVector2D.Create(xx, yy: Integer);

begin

inherited Create();

x := xx;

y := yy;

end;

class operator TVector2D.Add(a, b: TVector2D): TVector2D;

begin

Result := TVector2D.Create(a.x + b.x, a.y + b.y);

end;

class operator TVector2D.Multiply(a: TVector2D; b: Integer): TVector2D;

begin

Result := TVector2D.Create(a.x * b, a.y * b);

end;

var

a, b, c: TVector2D;

begin

a := TVector2D.Create(5, 10);

b := TVector2D.Create(2, 2);

c := a + b;

Writeln(Format(‘x = %d, y = %d’, [c.x, c.y]));

c := a * 10;

{ c := 10 * a; // だめ }

Writeln(Format(‘x = %d, y = %d’, [c.x, c.y]));

Readln;

end.

結果

x = 7, y = 12

x = 50, y = 100

結論。やっぱりガーベジコレクションがあると気楽でいい。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です