Операторы, oпределяемые пользователем
TMT Паскаль позволяет переопределение стандартных операторов на
предопределенных типах и перегрузке этих операторов для новых типов.
Для этого он использует конструкцию
overload
Синтаксис:
overload op_sign = Определенный идентификатор процедуры;
Где
op_sign - один из стандартных символов оператора:
+ - / * = <> < > <= >=
and or xor shl shr mod div in not
+:= -:= *:= /:=
Когда используется переопределенный оператор, TMT Паскаль использует
последнее определение, которое могло применяться к операндам данных
типов. Например, этот фрагмент:
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;
переопределяет оператор "+". Заметьте, что порядок перегрузки важен.
Обратный порядок
overload + = add_ii;
overload + = add_rr;
Заставит
add_rr использоваться всегда, так как целые числа
могут всегда переводиться в вещественные.
В подкаталоге SOURCES Вы можете найти исходник модуля COMP, который
понимает сложные числа и определяет операторы на них.
Замечания:
- Операторы +: =,-: =, *: = и/: = имеют самый низкий приоритет (ниже, чем операторы сравнения) и правую направленность.
- Операторы "+:=" и "-:=" предопределены для всех целочисленных и вещественных типов.
- Операторы "*:=" и "/:=" предопределены для всех вещественных типов, с очевидным значением.