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++)
return temp;
}
//перегрузка бинарного оператора + - сложение массива и целого числа
public static MyArray operator +(MyArray x, int y)
{
MyArray temp=new MyArray(x.length);
for (int i=0;i<x.length;i++)
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(“\t”+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 ”);
a2+=++a2+1; //!!!! Операция += не перегружена, вместо этого выполняется: