Страница 1 из 1

Перегрузка операторов в Delphi

Добавлено: 14 июл 2006, 08:39
LAngel
Недавно наткнулся на одном из форумов на информацию, что в 2005 Delphi появилась возможность перегружать операторы.
Был очень удивлен.

Код: Выделить всё

type
  TVector = packed record
    X, Y, Z : Single;
    procedure From(const X, Y, Z: Single);
    class operator Add(const Left, Right: TVector): TVector;
    class operator Implicit(const v: TVector): TPoint;
  end;

implementation

procedure TVector.From(const X, Y, Z: Single);
begin
  Self.X := X;
  Self.Y := Y;
  Self.Z := Z;
end;

class operator TVector.Add(const Left, Right: TVector): TVector;
begin
  Result.X := Left.X + Right.X;
  Result.Y := Left.Y + Right.Y;
  Result.Z := Left.Z + Right.Z;
end;

class operator TVector.Implicit(const v: TVector): TPoint;
begin
  Result.X := round(v.X);
  Result.Y := round(v.Y);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  v1, v2: TVector;
begin
  v1.From(50, 50, 0);
  v2.From(60, 20, 3);
  Canvas.Polygon([v1, v2, v1 + v2]);
end;

Добавлено: 14 июл 2006, 10:02
Duncon
А помоему их и раньше можно было перегружать..

Добавлено: 14 июл 2006, 11:15
LAngel
Duncon, в моей "любимой" Delphi 7 такого нету :(

Добавлено: 14 июл 2006, 14:54
Duncon
Значит у мну маразм, или я с чем путаю жара всетаки.. :) кста 06 Delphi просто рулит, молодцы разработчики...

Добавлено: 14 июл 2006, 16:22
Eugie
Дык это чисто .NET-ская возможность (поддерживается на уровне CLS). В принципе, перегрузка операторов м.б. реализована в любом CLS-совместимом языке.