Похожие презентации:
Перегрузка операций
1. Перегрузка операций
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:
13. Перегрузка операций
Любой класс может перегрузить операции true иfalse. Операции перегружаются парой, тип
возвращаемого значения операций – булевский.
Если в классе выполнена подобная перегрузка,
объекты класса могут использоваться как
условия в операторах условного перехода или
циклов (т.е. объект может быть истинным или
ложным). При вычислении условий используется
перегруженная версия операции true.
14. Класс комплексных чисел
15. Класс комплексных чисел
16. Класс комплексных чисел
Если оба < 0 будет ложь.17. Перегрузка операций
Кроме перечисленных операций, любойкласс может перегрузить операции для
неявного и явного приведения типов. При
этом используется следующий синтаксис:
public static implicit operator
<целевой тип>(<привод.тип> <имя>)
public static explicit operator
<целевой тип>(<привод.тип> <имя>)
18. Перегрузка операций
Ключевое слово implicit используется приперегрузке неявного приведения типов, а
ключевое слово explicit – при перегрузке
операции явного приведения. Либо
<целевой тип>, либо <приводимый тип>
должены совпадать с типом того класса,
где выполняется перегрузка операций.