Студопедия

КАТЕГОРИИ:


Архитектура-(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; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




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