Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
прог-шпоры-исходник.doc
Скачиваний:
1
Добавлен:
25.09.2019
Размер:
91.14 Кб
Скачать

20. Перегрузка операций:

Перегрузка операций - это средство языка, позволяющее вводить операции над типами, определяемыми пользователем. В PascalABC.NET можно использовать только предопределенные значки операций. Перегрузка операций для типа T, являющегося классом или записью, осуществляется при помощи статической (классовой) функции-метода со специальным именем operator ЗнакОперации. Перегрузка специальных операций +=, -=, *=, /= осуществляется с помощью статической (классовой) процедуры-метода, первый параметр которой передается по ссылке. Пример:

type

<имя класса>=class

re,im:real;

class function operator+ (a,b:<имя класса>):<имя класса>

begin

result.re:=a.re+b.re;

result.im:=a.im+b.im

end;

end;

Для перегрузки операций действуют следующие правила:

  1. Перегружать можно все операции за исключением @ (взятие адреса), as, is, new. Кроме того, можно перегружать специальные бинарные операции +=, -=, *=, /=, не возвращающие значений.

  2. Перегружать можно только еще не перегруженные операции.

  3. Тип по крайней мере одного операнда должен совпадать с типом класса или записи, внутри которого определена операция.

  4. Перегрузка осуществляется с помощью статической функции-метода, количество параметров которой совпадает с количеством параметров соответствующей операции (2 - для бинарной, 1 - для унарной).

  5. Перегрузка операций +=, -=, *=, /= осуществляется с помощью статической процедуры-метода, первый параметр которой передается по ссылке и имеет тип записи или класса, в котором определяется данная операция, второй - передается по значению и совместим по присваиванию с первым. Перегрузка остальных операций осуществляется с помощью статических функций-методов, параметры которых должны передаваться по значению.

  6. Типы интерфейсов не могут быть типами параметров. Причина: типы параметров должны вычисляться на этапе компиляции.

  7. Операции приведения типа задаются статическими функциями, у которых вместо имени используется operator implicit (для неявного приведения типа) или operator explicit (для явного приведения типа).

22. Абстрактные методы:

Методы, предназначенные для переопределения в подклассах, объявляются с ключевым словом abstract и называются абстрактными. Данные методы являются виртуальными, но ключевое слово virtual использовать не нужно.

type

<имя класса1>=class

<описание полей >

procedure <имя метода1>;abstract;

end;

Классы, содержащие абстрактные методы, также называются абстрактными. Экземпляры этих классов создавать нельзя. Классы с абстрактными методами используются как "полуфабрикаты" для создания других классов. Использование override при переопределении абстрактных методов обязательно, поскольку абстрактные методы являются разновидностью виртуальных.

type

<имя класса2>=class(<имя класса1>)

<описание полей >

procedure <имя метода1>;override;

begin

<тело метода>

end;

end;