русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2013-12-23; просмотров: 666; Нарушение авторских прав


В классе можно переопределять следующие унарные операции: + - ! ~ ++ --, а также константы true и false. При этом, если была перегружена константа true, то должна быть перегружена и константа false, и наоборот.

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

тип 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.

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

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

  1. конструктор, позволяющий создать объект-массив заданной размерности;
  2. конструктор, позволяющий инициализировать объект-массив обычным массивом;
  3. свойство, возвращающее размерность массива;
  4. индексатор, позволяющий просматривать и устанавливать значение по индексу в закрытом поле-массиве;
  5. метод вывода закрытого поля-массива;
  6. перегрузка операции унарный минус (все элементы массива меняют свое значение на противоположное);
  7. перегрузка операции инкремента (все элементы массива увеличивают свое значение на 1);
  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); } }

Задание. Добавьте в класс DemoArray переопределение унарного плюса (все элементы массива преобразуются в положительные), унарного декремента (все элементы массива уменьшаются на единицу)





<== предыдущая лекция | следующая лекция ==>
Индексаторы | Операции преобразования типов


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

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