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

14. Перегрузка операторов отношения.

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

Как и C++, язык C# позволяет выполнять перегрузку операторов для их использования в собственных классах. Это позволяет добиться естественного вида определяемого пользователем типа данных и использовать его в качестве основного типа данных. Например, можно создать новый тип данных с именем ComplexNumber, представляющий комплексное число, и определить методы выполнения математических операций над такими числами с использованием стандартных арифметических операторов, например оператора + для сложения двух комплексных чисел.

Чтобы выполнить перегрузку оператора, необходимо написать функцию с указанием имени оператора, а затем символа оператора, для которого выполняется перегрузка. Например, так выполняется перегрузка оператора +:

C#public static ComplexNumber operator+(ComplexNumber a, ComplexNumber b) Все перегрузки операторов являются статическими методами класса. Кроме того, следует учесть, что если перегружается оператор равенства (==), то необходимо перегрузить и оператор неравенства (!=). Операторы < и >, а также <= и >= тоже следует перегружать парами.

Ниже приведен полный список операторов, которые можно перегрузить:

-Унарные операторы: +-!~++--truefalse

-Бинарные операторы: +-*/%&|^<<>>==!=><>=<=

Как наглядно показано в программе, теперь можно использовать операторы "плюс" и "минус" для объектов, принадлежащих к классу ComplexNumber. Ниже приведены выходные данные:

Complex Number a = 10 + 12i

Complex Number b = 8 + 9i

Complex Number sum = 18 + 21i

Complex Number difference = 2 + 3i

Язык Java не поддерживает перегрузку операторов, хотя он выполняет внутреннюю перегрузку оператора + для объединения строк.

15. Перегрузка логических операторов.

Как вам должно быть уже известно, в C# предусмотрены следующие логические операторы: &, |, !, && и ||. Из них перегрузке, безусловно, подлежат только операторы &, | и !. Тем не менее, соблюдая определенные правила, можно извлечь также пользу из укороченных логических операторов && и ||.

При таком способе перегрузки логических операторов &, | и ! методы каждого из них возвращают результат типа bool. Это необходимо для того, чтобы использовать рассматриваемые операторы обычным образом, т.е. в тех выражениях, где предполагается результат типа bool. Напомним, что для всех встроенных в C# типов данных результатом логической операции должно быть значение типа bool. Поэтому вполне разумно предусмотреть возврат значения типа bool и в перегружаемых вариантах этих логических операторов. Но, к сожалению, такой способ перегрузки пригоден лишь в том случае, если не требуются укороченные логические операторы.

Перегрузка укороченных логических операторов

Для того чтобы применение укороченных логических операторов && и || стало возможным, необходимо соблюсти следующие четыре правила:

- В классе должна быть произведена перегрузка логических операторов & и |.

- Перегружаемые методы операторов & и | должны возвращать значение того же типа, что и у класса, для которого эти операторы перегружаются.

- Каждый параметр должен содержать ссылку на объект того класса, для которого перегружается логический оператор.

- Для класса должны быть перегружены операторы true и false.

Если все эти условия выполняются, то укороченные логические операторы автоматически становятся пригодными для применения.