- •8. Система PascalAbc.Net
- •9. Принципы объектно-ориентированного программирования.
- •10. Указатели. Ссылочные переменные.
- •15. Переменная Self:
- •11. Понятие класса. Инициализаторы полей:
- •12. Видимость членов класса:
- •13. Конструктор. Деструктор.
- •14. Методы:
- •16. Свойства:
- •17. Наследование:
- •18. Переопределение методов:
- •19. Наследование конструкторов:
- •21. Виртуальные методы и полиморфизм:
- •20. Перегрузка операций:
- •22. Абстрактные методы:
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;
Для перегрузки операций действуют следующие правила:
Перегружать можно все операции за исключением @ (взятие адреса), as, is, new. Кроме того, можно перегружать специальные бинарные операции +=, -=, *=, /=, не возвращающие значений.
Перегружать можно только еще не перегруженные операции.
Тип по крайней мере одного операнда должен совпадать с типом класса или записи, внутри которого определена операция.
Перегрузка осуществляется с помощью статической функции-метода, количество параметров которой совпадает с количеством параметров соответствующей операции (2 - для бинарной, 1 - для унарной).
Перегрузка операций +=, -=, *=, /= осуществляется с помощью статической процедуры-метода, первый параметр которой передается по ссылке и имеет тип записи или класса, в котором определяется данная операция, второй - передается по значению и совместим по присваиванию с первым. Перегрузка остальных операций осуществляется с помощью статических функций-методов, параметры которых должны передаваться по значению.
Типы интерфейсов не могут быть типами параметров. Причина: типы параметров должны вычисляться на этапе компиляции.
Операции приведения типа задаются статическими функциями, у которых вместо имени используется 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;