Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответы на вопросы зачета по информатике.docx с...docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
312.26 Кб
Скачать

1.4.3.3. Правила, управляющие перегрузкой

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

1) По крайней мере, тип у одного операнда перегруженного знака операции должен быть определенным пользователем типом (тип массивов, тип объектов, процедурный тип, тип перечисления). Законно вводить определенные пользователем версии “базисных” типов, такие как integer, real, и boolean.

2) Не разрешена спецификация типа объекта с постулированным интерфейсом (таким как object {D}) в качестве параметра знака операции. Причина – должна быть полная возможность разрешения перегрузки во время компиляции (т.е. статически).

3) Нет ограничений на тип результата перегруженной операции.

4) Число аргументов, старшинство перегруженной операции и форма (префиксная или постфиксная) унарной операции должны совпадать с соответствующими чертами для предопределенной операции с тем же знаком.

5) Конструкция разыменования со знаком ^ (см. обозначение правила Designator в синтаксисе) рассматривается здесь как постфиксный знак унарной операции. Следовательно, любая перегрузка знака операции ^ сохраняет форму унарного постфиксного знака; аналогично, унарные + и – знаки операций всегда являются унарными префиксными знаками операций.

6) Допускается перегрузка оператора присваивания. В этом случае, присваивание рассматривается как специальная операция со знаком ‘:=’, реализующая определенный побочный эффект и не производящая значения.

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

8) Законно специфицировать более одной версии перегруженной операции с одним и тем же знаком; в этом случае типы параметров соответствующих определений операции должны отличаться от любого другого определения операции с тем же знаком (см. раздел 1.4.3.1).   

1.4.3.4. Старшинство операций

При использовании в выражениях знаков операций синтаксически выделяются четыре их класса, различающихся по старшинству (силе связывания). Операции одного и того же старшинства соединяются слева направо. Например, x-y-z означает (x-y)-z. Старшинство операций от наибольшего старшинства к наименьшему имеет следующий вид:

1. унарная операция отрицания ~  2. операции типа умножения  3. операции типа сложения  4. отношения

Знаки операций используются в выражениях:

Expression = SimpleExpression

[ ( "=" | "#" | "<" | "<=" | ">" | ">=" | in ) SimpleExpression ]  | Designator implements DefinitionName.

SimpleExpression = [ "+"|"-" ] Term { ( "+" | "-" | or ) Term }.

Term = Factor { ( "*" | "/" | div mod | "&" ) Factor }.

Factor = number

| CharConstant  | string  | nil  | Set  | Designator  | new TypeName [ "(" ActualParameters ")" ]  | new ActivityInstanceName  | "(" Expression ")"  | "~" Factor.

Set = "{" [ SetElement { "," SetElement } ] "}".

SetElement = Expression [ ".." Expression ].

Допустимые знаки операций перечислены ниже. Некоторые из них применимы к операндам различных типов, обозначая различные операции. В этих случаях реальная операция идентифицируется типом операндов. Операнды должны быть выражениями, совместимыми по отношению к данному знаку операции (см. 1.11.6).