Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Бинарные Операторы

12K
12 августа 2005 года
Anton Ustinov
5 / / 12.08.2005
Мне тут интересно, товарищи из Борланд не сделали ли случайно так, чтобы в Delphi можно было бы задавать свои бинарные операции над структурами (записями, классами, объектами)? Если нет то тогда вопрос: а может ли такое произойти в будущем?
Если выражаюсь не понятно, то поясню на конкретике:
// приведу пример желаемого кода (так писать
// нельзя, но так понятней что я хотел)
operator *(r1, r2:TMyRecord):TMyRecord;
begin
.....
end;
....
....
var
a, b:TMyRecord;
begin
....
a := a * b;
....
end;
10
12 августа 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by Anton Ustinov
Мне тут интересно, товарищи из Борланд не сделали ли случайно так, чтобы в Delphi можно было бы задавать свои бинарные операции над структурами (записями, классами, объектами)?


Сделали. Язык называется C#.

12K
12 августа 2005 года
Anton Ustinov
5 / / 12.08.2005
Цитата:
Originally posted by Freeman
Сделали. Язык называется C#.



Да знаю, и язык знаю, да вообще-то даже в СИ++ такое возможно, меня же интересует нет ли чего подобного в Дельфях, или не будет ли.
Просто проблема в том, что один мой тов. не шарит в других языках (кроме Delphi), а мы с ним пишем серьезную программу, в которой очень сильно используется векторная алгебра и векторный анализ, и поэтому мне приходится тоже писать на Delphi. А писать для векторов функции и потом использовать префиксные выражения уже, честно говоря, надоело.
(слава богу дело до тензоров не дошло :) )
Вот наглядный пример:
r := vmul(vsum(a, muls(b, 2)), vdif(d, r));
куда красивее (и удобнее) было бы
r := (a + 2*b)^(d-r); //тут ^ - векторное произв.
в громоздких формулах это имеет решающее значение.

10
12 августа 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by Anton Ustinov
меня же интересует нет ли чего подобного в Дельфях, или не будет ли.


Что планируется в следующей версии Дельфи, одному богу известно. Или черту.

5
12 августа 2005 года
hardcase
4.5K / / 09.08.2005
Есть у меня такой замечательный компилер, называется TNT Pascal - он умеет переопределять стандартные бинарные операторы. Поддерживает классы! :) :) :)
12K
13 августа 2005 года
Anton Ustinov
5 / / 12.08.2005
Цитата:
Originally posted by hardcase
Есть у меня такой замечательный компилер, называется TNT Pascal - он умеет переопределять стандартные бинарные операторы. Поддерживает классы! :) :) :)



Вопрос, тогда такой: можно ли в нем заводить массивчики из ~10^6 векторов (вектор - 3 real-а)?

5
13 августа 2005 года
hardcase
4.5K / / 09.08.2005
Цитата:
Originally posted by Anton Ustinov
Вопрос, тогда такой: можно ли в нем заводить массивчики из ~10^6 векторов (вектор - 3 real-а)?


По моему, такое не возбраняется, но ТАКИХ экспериментов я не проводил.

12K
15 августа 2005 года
Anton Ustinov
5 / / 12.08.2005
hardcase, может ссылочку дашь, а то что-то нигде не могу найти компилер. Или если тебе удобно мне на мыло скинь (хотя вряд ли).
Я тогда сяду и поэксперементирую :)
Заодно, кстати, хотелось бы узнать синтаксис для описания своих бинарных операторов.
5
15 августа 2005 года
hardcase
4.5K / / 09.08.2005
Цитата:
Originally posted by Anton Ustinov
hardcase, может ссылочку дашь, а то что-то нигде не могу найти компилер. Или если тебе удобно мне на мыло скинь (хотя вряд ли).
Я тогда сяду и поэксперементирую :)
Заодно, кстати, хотелось бы узнать синтаксис для описания своих бинарных операторов.


Там оЧепятка вышла компилер - TMT Pascal
у меня он версии v3.50, правда для MS_DOS :(

Сайт компании:

http://www.tmt.com/


В нете нашёл ссылку на полноценный (Win32) TMT компилер :) :) :) :

http://arsuit.narod.ru/programming.htm

5
15 августа 2005 года
hardcase
4.5K / / 09.08.2005
Цитата:
Originally posted by Anton Ustinov
Заодно, кстати, хотелось бы узнать синтаксис для описания своих бинарных операторов.


Взял из файла справки:

TMT Pascal allows redefining of the standard operators on predefined types and overloading of these operators for new types. For this, it uses the construction

overload

The syntax is:

overload op_sign = qualified procedure identifier;

Where the op_sign is one of the standard operator symbols:

+ - / * = <> < > <= >=
and or xor shl shr mod div in not
+:= -:= *:= /:=

When a re-defined operator is used, TMT Pascal uses the last definition that could be applied toward operands of given types. For example, this fragment:

function add_rr (a, b: Real): Real;
Result := (a + b) * 2;
function add_ii (a, b: Integer): Integer;
Result := (a + b) * 2;

overload + = add_rr;
overload + = add_ii;

redefines the "+" operator. Notice that the order of overload's is important. The reverse order

overload + = add_ii;
overload + = add_rr;

will cause add_rr to be used always since integers can always be cast into reals.

In the SOURCES subdirectory you can find the source of the COMP module which realizes the complex numbers and defines the operators on them.

Remarks:

· The operators +:=, -:=, *:= and /:= have the lowest precedence (lower, than the comparison operators) and are right-associative.
· The operators "+:=" and "-:=" are predefined for all integer and real types.
· The operators "*:=" and "/:=" are predefined for all real types, with the obvious meaning.

12K
16 августа 2005 года
Anton Ustinov
5 / / 12.08.2005
Еще маленький, но важный question
А порядок описания важен?
В том смысле что коммутативность операторов иногда может отсутсвовать
например умножение матриц может быть неопределено, если матрицы переставить местами.
Например:
A*B = C
а вот
B*A неопределено.
PS: После ответа можно закрывать тему.
5
16 августа 2005 года
hardcase
4.5K / / 09.08.2005
Цитата:
Originally posted by Anton Ustinov
Еще маленький, но важный question
А порядок описания важен?
В том смысле что коммутативность операторов иногда может отсутсвовать
например умножение матриц может быть неопределено, если матрицы переставить местами.
Например:
A*B = C
а вот
B*A неопределено.


Я не знаю, всё в спавке надо смотреть.
Я так полагаю, перегрузка операторов взята из C++ и, похоже, полностью соответствует. :}

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог