Перегрузка операторов в Delphi
Добавлено: 14 июл 2006, 08:39
Недавно наткнулся на одном из форумов на информацию, что в 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;