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

Содержание

Слайд 2

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

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

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

класса нам нужно выполнить операции:
C = (A + B) * D;
Без перегрузки это будет выглядеть как-то так:
С = D.Multiply(A.Add(B));
Слайд 3

Перегрузить можно такие операции как : унарные +, -, !, ~,

Перегрузить можно такие операции как :

унарные +, -, !, ~,

++, --, true, false
бинарные +, -, *, /, %, &, |, ^, <<, >>, ==, !=, >, <, >=, <=
Слайд 4

Перегрузка операций При перегрузке бинарной операции автоматически перегружается соответствующая операция с

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

При перегрузке бинарной операции автоматически перегружается соответствующая операция с присваиванием

(например, при перегрузке операции + перегрузится и операция +=).
Слайд 5

Перегрузка операций Некоторые операции могут быть перегружены только парами: == и !=, > и = и

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

Некоторые операции могут быть перегружены только парами: == и !=,

> и <, >= и <=, true и false.
Слайд 6

Для каких классов есть смысл определять такие операции? Понятно, что нет

Для каких классов есть смысл определять такие операции?

Понятно, что нет

смысла складывать CPet (питомцев) или CStudent (студентов) – но их можно сравнивать!
Слайд 7

Для каких классов есть смысл определять такие операции? практически любой объект

Для каких классов есть смысл определять такие операции?

практически любой объект

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

Перегрузка операций Для перегрузки операций используется специальный статический метод, имя которого

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

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

из ключевого слова operator и знака операции. Количество формальных параметров метода зависит от типа операции: унарная операция требует одного параметра, бинарная – двух. Метод обязательно должен иметь модификатор доступа public.
Слайд 9

Класс комплексных чисел

Класс комплексных чисел

Слайд 10

Класс комплексных чисел

Класс комплексных чисел

Слайд 11

Перегрузка операций Параметры метода перегрузки - по значению. Тип формальных параметров

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

Параметры метода перегрузки - по значению.
Тип формальных параметров и

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

Внесем некоторые изменения в класс Complex:

Внесем некоторые изменения в класс Complex:

Слайд 13

Перегрузка операций Любой класс может перегрузить операции true и false. Операции

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

Любой класс может перегрузить операции true и false. Операции перегружаются

парой, тип возвращаемого значения операций – булевский. Если в классе выполнена подобная перегрузка, объекты класса могут использоваться как условия в операторах условного перехода или циклов (т.е. объект может быть истинным или ложным). При вычислении условий используется перегруженная версия операции true.
Слайд 14

Класс комплексных чисел

Класс комплексных чисел

Слайд 15

Класс комплексных чисел

Класс комплексных чисел

Слайд 16

Класс комплексных чисел Если оба

Класс комплексных чисел

Если оба < 0 будет ложь.

Слайд 17

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

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

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

и явного приведения типов. При этом используется следующий синтаксис:
public static implicit operator <целевой тип>(<привод.тип> <имя>)
public static explicit operator <целевой тип>(<привод.тип> <имя>)
Слайд 18

Перегрузка операций Ключевое слово implicit используется при перегрузке неявного приведения типов,

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

Ключевое слово implicit используется при перегрузке неявного приведения типов, а

ключевое слово explicit – при перегрузке операции явного приведения. Либо <целевой тип>, либо <приводимый тип> должены совпадать с типом того класса, где выполняется перегрузка операций.
Слайд 19

Класс комплексных чисел

Класс комплексных чисел