Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Тип 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); }

}

}







© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.