русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2013-12-23; просмотров: 3070; Нарушение авторских прав


Вычитание чисел с плавающей запятой.

Вычитание целых чисел.

Оператор вычитания

Сцепление строк.

Сложение чисел с плавающей запятой.

Сумма вычисляется в соответствии с арифметическими правилами стандарта IEEE 754.

Если один из операндов бинарного оператора имеет тип с плавающей запятой, а второй операнд имеет целый тип, то в этом случае вычисление операции выполняется следующим образом:

· Если один из операторов имеет целый тип, он преобразуется к типу с плавающей запятой, соответствующему типу второго операнда.

Пример.

var i = +5; // unary plus

var i1 = 5 + 5; // addition

var i2 = 5 + .5; // addition

var i3 = "5" + "5"; // string concatenation

var i4 = 5.0 + "5"; // string concatenation

 

Если один операнд при сцеплении строк равен null, то подставляется пустая строка. Иначе любой нестроковый аргумент преобразуется в свое строковое представление путем вызова виртуального метода ToString, наследуемого от типа bject.

Операция вида x – y

В контексте checked если разность выходит за пределы диапазона типа результирующего значения, возникает исключение System.OverflowException. В контексте unchecked о переполнениях не сообщается, и все старшие биты, выходящие за пределы диапазона результирующего значения, отбрасываются. Пример.

Данный пример будет работать, т.к. uint+ uint дадут в результате выражения тип uint, но вместо -1 получим в результате 4294967295.

static void Main(string[] args)

{

uint A = 10;

uint B = 9;

Console.WriteLine(B-A);

}

var i = -5;

var i1 = 5 - 5;

var i2 = 5 - .5;

 

У всех унарных и бинарных операторов есть стандартная реализация, доступная автоматически в любом выражении. В дополнение к стандартным реализациям объявление operator в классах и структурах позволяет использовать пользовательские реализации. Пользовательские реализации операторов всегда имеют приоритет над предопределенными реализациями операторов.



К унарным операторам, допускающим перегрузку, относятся:

+ - ! ~ ++ -- true false

К бинарным операторам, допускающим перегрузку, относятся:

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

Невозможна перегрузка операторов доступа к членам, вызова методов или операторов =, &&, ||, ??, ?:, =>, checked, unchecked, new, typeof, default, as и is.

При перегрузке бинарного оператора связанный оператор присваивания (если он есть) также неявно перегружается. Например, при перегрузке оператора * также выполняется перегрузка оператора *=. Оператор присваивания (=) нельзя перегрузить. При присваивании всегда происходит простое побитовое копирование значения в переменную.

Перегрузка операций приведения типов, например (T)x, осуществляется путем предоставления пользовательских преобразований.

Доступ к элементу, например a[x], не считается оператором, допускающим перегрузку.

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

Стандартные операторы сложения:

int operator +(int x, int y);
uint operator +(uint x, uint y);
long operator +(long x, long y);
ulong operator +(ulong x, ulong y);

у пользовательского оператора не может быть такой же сигнатуры, что и у стандартного оператора, поэтому пример работать не будет:

using System;

namespace ConsoleApplication3

{

class Program

{

public static int operator +(int a, int b)

{

return a + 2*b;

}

static void Main(string[] args)

{

Int32 a = 5;

Int32 b = 6;

Int32 c = a + b;

Console.WriteLine(c);

}

}

}

Ошибка. Тип одного из параметров бинарного оператора должен быть вмещающим

Пример.

Типы, определенные пользователем, могут вызвать перегрузку оператора +.

using System;

namespace ConsoleApplication3

{

class myint

{

int a;

public myint(int a)

{

this.a = a;

}

public static int operator +(myint a, myint b)

{

return a.a + b.a;

}

}

 

class Program

{

static void Main(string[] args)

{

myint a = new myint(7);

myint b = new myint(9);

int c = a + b;

Console.WriteLine(c);

}

}

}

 

Задание.



<== предыдущая лекция | следующая лекция ==>
Сложение целых чисел. | Cпocoбы aдpecaции дaнныx


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.004 сек.