КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Перегрузка бинарных операций
Перегрузка унарных операций К унарным операциям, которые можно перегружать в языке С# относятся: o унарные + и – o логическое!, o ++,-- o true, false – обычно перегружаются для типов SQL Синтаксис объявления перегруженной унарной операции: public static тип_возвр_знач operator унарная_операция (один параметр), где параметр – это класс, для которого перегружается данная операция Например, public static myclass operator ++(myclass x) public static int operator +(myclass x) public static bool operator true(myclass x) Перегруженная операция возвращает: o унарные + и –,! величину любого типа o ++,-- величину типа класса o true, false – величину типа bool Префиксные и постфиксные ++ и – не различаются при перегрузке. Пример перегрузки унарных операций на примере класса “Одномерный массив” class MyArray { public MyArray(int size) { length =size; a=new int[length]; } public MyArray(params int [] mas) { length =mas.length; a=new int[length]; for (int i=0;i<length;i++) a[i]=mas[i]; } public static MyArray operator ++(MyArray x) //перегрузка унарного оператора ++ { MyArray temp=new MyArray(x.length); for (int i=0;i<length;i++) temp[i]=++x.a[i]; // попробуйте temp.a[i]=++x.a[i] return temp; } //индексатор, в случае выхода за рамки массива – генерируется исключение! public int this [int i] { get {if (i>=0 && i<length) return a[i]; else throw new IndexOutOfRangeException();} set { if (i>=0 && i<length) a[i]=value; else throw new IndexOutOfRangeException();} } public void Print(string name) { Console.WriteLine(name+”:”); for (int i=0;i<length;i++) Console.WriteLine(“ ”+a[i]); Console.WriteLine(); } public void Enter() { //в цикле - ввод элементов массива – реализуйте сами! } //данные класса – сам массив и его размерность int [] a; int length; } …Main() { try { MyArray a1=new MyArray(5,2,-1,1,-2); a1.Print(“Первый массив ”); a1++; //теперь к экземпляру класса можно применить операцию ++ a1.Print(“Использование операции ++ для всех элементов массива ”); MyArray a2=new MyArray(5); a2.Enter(); a2.Print(“Второй массив ”);
a2++; a2.Print(“Использование операции ++ для всех элементов массива”); } catch (Exception e) {Console.WriteLine(e.Message);} }…
К бинарным операциям, которые можно перегружать в языке С# относятся: o арифметические операции (+,-,*,/,%) o битовые (&, |, ^,<<,>>) o логические (= =,!=,>,<,>=,<=) Синтаксис объявления перегруженной бинарной операции: public static тип_возвр_знач operator бинарная_операция (параметр1, параметр2), где параметр – это класс, для которого перегружается данная операция, не обязательно 2 параметра будут экземплярами класса. Перегруженная бинарная операция может возвращать величину любого типа. Например, public static myclass operator +(myclass x, myclass y) public static myclass operator +(myclass x,int y) public static bool operator = =(myclass x,myclass y) Операции сравнения (= =,!=,>,<,>=,<=) определяются только парами и обычно возвращают логическое значение. Перегрузка операций отношения будет иллюстрирована в следующей лекции с использованием интерфейсов.
Пример перегрузки бинарных операций на примере класса “Одномерный массив” //Перегружает операция сложения(+) либо двух массивов, либо массива и целого числа (то есть к //каждому элементу массива будет прибавлено это число) class MyArray { public MyArray(int size) { length =size; a=new int[length]; } public MyArray(params int [] mas) { length =mas.length; a=new int[length]; for (int i=0;i<length;i++) a[i]=mas[i]; } //перегрузка бинарного оператора + - сложение двух массивов (как экземпляров класса) public static MyArray operator +(MyArray x, MyArray y) { int all_len=x.length<y.length?x.length:y.length; MyArray temp=new MyArray(all_len); for (int i=0;i< all_len; i++) temp[i]=x[i]+y[i]; //попробуйте temp.a[i]=x.a[i]+y.a[i]!!! return temp; } //перегрузка бинарного оператора + - сложение массива и целого числа public static MyArray operator +(MyArray x, int y) { MyArray temp=new MyArray(x.length); for (int i=0;i<x.length; i++) temp[i]=x[i]+y; //попробуйте temp.a[i]=x.a[i]+y!!! return temp; } public static MyArray operator ++(MyArray x) //перегрузка унарного оператора ++ { MyArray temp=new MyArray(x.length); for (int i=0;i<length;i++) temp[i]=++x.a[i]; return temp; } //индексатор, в случае выхода за рамки массива – генерируется исключение!
public int this [int i] { get {if (i>=0 && i<length) return a[i]; else throw new IndexOutOfRangeException();} set { if (i>=0 && i<length) a[i]=value; else throw new IndexOutOfRangeException();} } public void Print(string name) { Console.WriteLine(name+”:”); for (int i=0;i<length;i++) Console.WriteLine(“ ”+a[i]); Console.WriteLine(); } public void Enter() { //в цикле - ввод элементов массива – реализуйте сами! } //данные класса – сам массив и его размерность int [] a; int length; } …Main() { try { MyArray a1=new MyArray(5,2,-1,1,-2); a1.Print(“Первый массив ”); MyArray a2=new MyArray(5); a2.Enter(); a2.Print(“Второй массив ”); a2++; a2.Print(“Использование операции ++ для всех элементов массива”); MyArray a3=a1+a2; а3.Print(“Сумма массивов первого и второго”); a1=a1+100; a1.Print(“Первый массив плюс 100 ”);
Дата добавления: 2014-01-20; Просмотров: 467; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |