![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Тип 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); } } }
|