Перегрузка операций
Перегрузка операций
Перегрузить можно такие операции как :
Перегрузка операций
Перегрузка операций
Для каких классов есть смысл определять такие операции?
Для каких классов есть смысл определять такие операции?
Перегрузка операций
Класс комплексных чисел
Класс комплексных чисел
Перегрузка операций
Внесем некоторые изменения в класс Complex:
Перегрузка операций
Класс комплексных чисел
Класс комплексных чисел
Класс комплексных чисел
Перегрузка операций
Перегрузка операций
Класс комплексных чисел
Класс комплексных чисел
550.00K
Category: programmingprogramming

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

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 – при перегрузке
операции явного приведения. Либо
<целевой тип>, либо <приводимый тип>
должены совпадать с типом того класса,
где выполняется перегрузка операций.

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

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

English     Русский Rules