Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
тюмгу / Лекции КБ ИБАС 1 курс 2 семестр / лекция10 Безопасность 2018.pptx
Скачиваний:
12
Добавлен:
08.12.2019
Размер:
149.27 Кб
Скачать

Дополнительные члены класса

перегруженные операторы,

свойства,

индексаторы

упрощают синтаксис,

позволяют приблизить работу с классами к обработке встроенных типов.

Перегруженные операторы вместо

вызова метода используется

обычное символическое

обозначение данного оператора.

1

+ - ! ++ --

Перегружаемые унарные операторы.

+ - * / % & | ^ << >>

Перегружаемые бинарные операторы.

== != < > <= >=

Перегружаемые операторы сравнения

&& ||

Неперегружаемые логические операторы, но вместо них можно использовать перегружаемые & и |.

2

[ ]

Вместо этого неперегружаемого оператора используются индексаторы.

()

Неперегружаемый оператор

Неперегружаемые составные операторы присваивания.

Но если перегружен входящий в них оператор, например, +, то оператор += будет использовать именно перегруженный +,

= . ?: new is sizeof typeof

Неперегружаемые операторы.

3

Примечание 1.

Если требуется перегрузить

оператор сравнения,

то нужно предусмотреть также

перегрузку парного к нему оператора:

==и != ,

<и >, <= и >=.

Примечание 2.

Перегруженные операторы ++ и - -

изменяют значение операнда

(в отличие от прочих операторов).

4

Синтаксис определения метода-оператора

унарный

public static ret_type operator op (par_type par_name)

{

statements

}

бинарный

public static ret_type operator op (par_type1 par_name1, par_type2 par_name2)

{

statements

}

ret_type – тип возвращаемого значения,

op - символьное обозначение перегружаемого оператора,

par_type - тип,

par_name - имя формального параметра.

5

Правила перегрузки операторов

Невозможно изменить

приоритет выполнения оператора,

количество операндов.

Тип возвращаемого значения не может быть void.

Поэтому в теле метода – оператора обязательно должен быть оператор return.

При перегрузке унарных операторов операнд должен совпадать по типу с классом, для которого перегружен данный оператор.

6

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

В объявлении перегружаемого оператора нельзя использовать для формальных параметров модификаторы ref и out.

Действие перегруженного оператора должно соответствовать действию исходного,

например, операторы сравнения должны возвращать значение типа bool.

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

7

Файл ClassDate.cs:

using System;

namespace ConsoleApplication2

{

public class ClassDate

{

private int month;

private int year;

const int InitMonth = 1;

const int InitYear = 2014;

public ClassDate()

{

this.month = InitMonth;

this.year = InitYear;

}

8

public ClassDate(int month, int year)

{

this.month = month;

this.year = year;

}

public int GetMonth()

{

return month;

}

public int GetYear()

{

return year;

}

9

public static ClassDate operator + (ClassDate d1,

ClassDate d2)

{

ClassDate result = new ClassDate();

result.month = (d1.month+d2.month)%12;

result.year = d1.year+ d2.year+ (int)(d1.month+

d2.month)/12;

return result;

}

10

public static ClassDate operator +(ClassDate d1, int m)

{

ClassDate result = new ClassDate();

result.month = (d1.month+m)%12;

result.year = d1.year+(int)(d1.month+m)/12;

return result;

}

public static ClassDate operator+ (int m, ClassDate d1)

{

ClassDate result = new ClassDate();

result.month = (d1.month+m)%12;

result.year = d1.year+(int)(d1.month+m)/12;

return result;

}

}

}

11