Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






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






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

Понятие перегрузки операций в С#

В C# так же имеется возможность перегружать операции.

И есть дополнительные ограничения

1. + -! ~ ++ -- true false

2. + - * / % & | ^ < < > > - бинарные операции и они могут быть перегружены

3. ==! = < > = > < = - операции сравнения и должны перегружаться парами

4. [] не перегружаются(это обходится с помощью индексаторов)

5. () не перегружаются (это можно обойти с помощью специальных методов преобразования

)

6. += -= *= /= %= & =! = -- реализуются исходя из пункта 2

1) Объявление 2 объектов класса Point

2) Вывод на экран значений каждого объекта

3) Попытка сложить и вычесть две точки и вывести результат на экран, но блок 3 работать не будет, так как компилятор не может выполнить «+ и -», для нестандартных типов. Выход из этой ситуации --- оснастить тип Point специальными операциями.

 

Если в данном примере, необходимо прибавить к точке целое число, то указанная операция сложения не подходит и необходимо явно создавать оператор + с параметром point и int.

Тоже самое для -, если параметр отличается от point

Операции += и -=

В отличии от языка С++, в языке С# эмулируются при появлении операции +-

Point ptThree = new Point(90, 5);

ptThree+=ptOne;

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

Для того, что бы использовать операцию ++

Public static Point operator ++(point p1{

Return new point(p1.x+1, p1.y+1); }

Public static Point operator --(point p1){

Return new point(p1.x-1, p1.y-1); }

}

В отличии от языка С++, в языке С# автоматически создаются две версии инкремента/декремента(постфиксные, префиксные)

 

Перегрузка операции == //операция эквивалентности

C.lass Point{

.

.

Public override bool equals(object 0){

Return 0.toString()==this.toString();

}

Public static bool operator == (point p1, point p2){

Return p1.equals(p2); }

Public static bool operator! =(point p1, point p2){

Return! p1.equals(p2); }

}

В данной реализации проверка на равенство делается с помощью перекрытия метода equals, который перешл от system.object.equals.

С# требует в обязательном порядке реализации пары(! =/==), в отличии от С++, где можно реализовать в любом сочетании

Перегрузка операции сравнения >, <, > =, < =

Class Point: IComparable{

.

.

Public int compareto (object obj){

If (obj is point){

Point p = (point)obj;

If(this.x> p.x & & this.y> p.y) return 1;

If(this.x< p.x & & this.y< p.y) return -1;

Else return 0;

}

Else throw new argument exception();

}

Public static bool operator < (point p1, point p2){

Return (p1.compareto(p2))< 0;

}

Public static bool operator > (point p1, point p2){

Return (p1.compareto(p2))> 0;

}

Public static bool operator > =(point p1, point p2){

Return (p1.compareto(p2))> =0;

}

Public static bool operator < =(point p1, point p2){

Return (p1.compareto(p2))< =0;

}

Классы






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.