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

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
Аватара пользователя
LAngel
Сообщения: 277
Зарегистрирован: 30 мар 2005, 08:19
Откуда: Ульяновск
Контактная информация:

Недавно наткнулся на одном из форумов на информацию, что в 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;
С уважением, Lost Angel...
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

А помоему их и раньше можно было перегружать..
Аватара пользователя
LAngel
Сообщения: 277
Зарегистрирован: 30 мар 2005, 08:19
Откуда: Ульяновск
Контактная информация:

Duncon, в моей "любимой" Delphi 7 такого нету :(
С уважением, Lost Angel...
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Значит у мну маразм, или я с чем путаю жара всетаки.. :) кста 06 Delphi просто рулит, молодцы разработчики...
Eugie
Сообщения: 708
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

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