Студопедия
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Объявления новых знаков операций

Читайте также:
  1. A. Кетоновых тел
  2. V этап. Формирование операций лексико-семантического анализа.
  3. VII этап. Формирование операций морфемного анализа.
  4. А) запишите в журнал регистрации хозяйственных операций бухгалтерские проводки за месяц
  5. Аудит валютно-обменных операций
  6. Аудит кассовых операций
  7. Аудит кассовых операций
  8. Аудит кассовых операций, операций по расчетному и другим счетам в банках. Типичные ошибки.
  9. Аудит операций по выбытию материально-производственных запасов, проверка их использования в производстве
  10. Аудит операций по корреспондентским


Перегруженные операции вводятся как объявления знаков операций. Синтаксис объявления имеет следующий вид:

OperatorDeclaration = operator [ OpModifiers ] OpSymbol [ FormalParameters ] ";" OperatorBody ";".
OperatorBody = Declarations BlockStatement OpSymbol.
OpModifiers = "{" ident { "," ident } [ "," Priority ] "}".
Priority = ConstExpression.
OpSymbol = String. // 1-, 2- или 3-литерная строка; множество возможных символов ограничено

Пример:

operator '+' (x1, x2: Complex): Complex;
var res: Complex;
begin
res.re:= x1.re + x2.re;
res.im:= x1.im + x2.im;
return res
end '+';

Для перегруженных знаков операций количество параметров в объявлении знака операции должно быть тем же, что и для предопределенной операции с тем же знаком. Для объявления нового знака операций количество параметров в объявлении знака операции должно быть равным одному или двум в зависимости от того, является ли операция унарной или бинарной.

В определенном пользователем знаке операции для присваивания должно быть два параметра, первый из которых должен подставляться по ссылке.

Имеется возможность определять перегрузки и новые операции только в module, но не в object или definition. Причина – должна быть полная возможность статического разрешения перегрузки во время компиляции. Другая причина – ясно разделить две концепции: объекты, реализующие интерфейсы (определения) и абстрактные типы данных с ассоциированными операциями.

Объявления знаков операций можно сделать видимыми извне модуля, где они объявлены. В этом случае, законно использовать указанные знаки операций в нормальных выражениях наряду с предопределенными знаками операций в единицах, импортирующих данный модуль. Компилятор ответственен за выбор правильной версии знака операций в каждом случае.

Допускается определять знаки операций в некотором модуле для расширения абстрактного типа данных. Эти знаки операций должны быть определены в терминах операций, уже определенных в модуле, где объявлен абстрактный тип данных.

Обычно, все импортируемые вхождения должны квалифицироваться именами импортируемых единиц. Это также возможно, но не требуется для знаков операций. Например, имеется два законных способа использования “новых сложений” для операндов некоторого типа T.

module M;
type T {public}= …;
operator {public}"+" (a, b: T): T; begin …end "+";
end M.

object Obj;
import M;
var x, y: T;
begin
x:= x + y; (* подобно обычному выражению *)
x:= x M."+" y; (* полностью квалифицрованный *)
end Obj.

Процедура знака операции не может быть вызвана как обычная функция:

x:= M."+"(x, y); (* не законно; должна использоваться нотация выражения *)




Дата добавления: 2015-01-30; просмотров: 71 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2025 год. (0.007 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав