Тип operator унарная_операция (параметр)

Примеры заголовков унарных операций:

public static int operator + (DemoArray m)

public static DemoArray operator --(DemoArray m)

public static bool operator true (DemoArray m)

Параметр, передаваемый в операцию, должен иметь тип класса, для которого она определяется. При этом операция должна возвращать:

1) для операций +, -, !, ~ величину любого типа;

2) для операций ++, -- величину типа класса, для которого она определяется;

3) для операций true и false величину типа bool.

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

Пример 1

В качестве примера рассмотрим класс DemoArray, реализующий одномерный массив, в котором содержатся следующие функциональные элементы:

1) конструктор, позволяющий создать объект-массив заданной размерности;

2) конструктор, позволяющий инициализировать объект-массив обычным массивом;

3) свойство, возвращающее размерность массива;

4) индексатор, позволяющий просматривать и устанавливать значение по индексу в закрытом поле-массиве;

5) метод вывода закрытого поля-массива;

6) перегрузка операции унарный минус (все элементы массива меняют свое значение на противоположное);

7) перегрузка операции инкремента;

8) перегруза констант true и false (при обращении к объекту будет возвращаться значение true, если все элементы массива положительные, в противном случае, будет возвращаться значение false).

class DemoArray

{

int[] MyArray;//закрытый массив

public DemoArray(int size) //конструктор 1

{ MyArray=new int[size]; }

public DemoArray(params int[] arr)//конструктор 2

{

MyArray = new int[arr.Length];

for (int i = 0; i < MyArray.Length; i++)

MyArray[i] = arr[i];

}

public int LengthArray //свойство, возвращающее размерность

{

get { return MyArray.Length; }

}

public int this[int i] //индексатор

{

get

{

if (i < 0 || i >= MyArray.Length)

throw new Exception("выход за границы массива");

return MyArray[i];

}

set

{

if (i < 0 || i >= MyArray.Length)

throw new Exception("выход за границы массива");

else MyArray[i] = value;

}

}

public static DemoArray operator -(DemoArray x) //перегрузка операции унарный минус

{

DemoArray temp = new DemoArray(x.LengthArray);

for (int i = 0; i < x.LengthArray; ++i) temp[i] = -x[i];

return temp;

}

public static DemoArray operator ++(DemoArray x) //перегрузка операции инкремента

{

DemoArray temp = new DemoArray(x.LengthArray);

for (int i = 0; i < x.LengthArray; ++i) temp[i] = x[i]+1;

return temp;

}

public static bool operator true(DemoArray a) //перегрузка константы true

{

foreach (int i in a.MyArray) if (i<0) return false;

return true;

}

public static bool operator false(DemoArray a)//перегрузка константы false

{

foreach (int i in a.MyArray) if (i>0) return true;

return false;

}

public void Print(string name) //метод – выводит поле-массив на экран

{

Console.WriteLine(name + ": ");

for (int i = 0; i < MyArray.Length; i++)

Console.Write(MyArray[i] + " ");

Console.WriteLine();

}

}

class Program

{

static void Main()

{

try

{

DemoArray Mas = new DemoArray(1, -4, 3, -5, 0);//вызов конструктора2

Mas.Print("Исходный массив");

Console.WriteLine("\nУнарный минус");

DemoArray newMas=-Mas; //применение операции унарного минуса обратите внимание, что создается новый объект и знаки меняются

Mas.Print("Mассив Mas");

newMas.Print("Массив newMas"); //только у нового массива Console.WriteLine("\nОперация префиксного инкремента");

DemoArray Mas1=++Mas;

Mas.Print("Mассив Mas");

Mas1.Print("Mассив Mas1=++Mas");

Console.WriteLine("\nОперация постфиксного инкремента");

DemoArray Mas2=Mas++;

Mas.Print("Mассив Mas");

Mas2.Print("Mассив Mas2=Mas++");

if (Mas)

Console.WriteLine("\nВ массиве все элементы положительные\n");

else

Console.WriteLine("\nВ массиве есть не положительные

элементы\n");

}

catch (Exception e) { Console.WriteLine(e.Message); }

}

}


Бинарные операции

При разработке класса можно перегрузить следующие бинарные операции: + - * / % & | ^ << >> == != < > <= >=. Обратите внимание, операций присваивания в этом списке нет.

Синтаксис объявителя бинарной операции:








Дата добавления: 2015-10-26; просмотров: 843;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.007 сек.