Перегрузка унарных операторов
Конструктор сайтов - uCoz
Меню сайта


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


Форма входа


Помощь проекту

PayPal:

LiqPay or Credit/Debit Card:

W1 "Единый кошелек":
199990419310
WebMoney:
WME - E509190786817
WMZ - Z195499640086
WMU - U204403357554
WMR - R280087882619




Активные темы

  • Все вопросы касающиеся Neil Scope (6444)
  • Заказ плат под NeilScope3 (12.2015) (59)
  • Первое знакомство с микроконтроллерами Silabs (105)
  • инвертор на микропроцессоре с 12\220v с синусом на выходе (2)
  • Куплю плату NS-3 (0)
  • Подскажите (0)
  • Осваиваем LPC2478... (1)
  • Мелкие вопросы по МК51 от SiLabs-a.. (40)
  • Детали для Neil Scope 2 (0)
  • NeiLogicAnalyzer (47)



  • Статистика

    Онлайн всего: 2
    Гостей: 2
    Пользователей: 0



    Рекомендуемые браузеры: Mozzilla, Google Chrome






    Приветствую Вас, Пробегающий мимо · RSS 18.11.2017, 19:32

    Основы C#. Урок 16. Перегрузка унарных операторов

    Унарные операторы - это те, которые имеют только один операнд (параметр). Типичные примеры унарных операторов - это унарный минус (меняющий знак на противоположный) и оператор инкремента ++.

    Рассмотрим перегрузку унарных операторов на примере рассмотренного на прошлом уроке класса Vector. А именно, добавим в наш класс унарный минус, который будет менять вектор с координатами x и y на вектор с координатами -x и -y. Для этого добавьте в наш класс Vector следующие строки:

     public static Vector operator -(Vector v)
     {
     Vector res = new Vector(-v.x, -v.y);
     return res;
     }

    Обратите внимание, что при перегрезке унарных операторов (как, впрочем, и преперегрузке бинарных), мы должны поставить модификатор static.

    Для испытания перегруженного оператора изменить класс Test приблизительно следующим образом:

     class Test
     {
     static void Main(string[] args)
     {
     Vector a=new Vector(1, 2), b;
     b = -a;
     Console.WriteLine("x=" + b.GetX() + ", "
     + "y=" + b.GetY());
     }
     }

    Как и следовало ожидать, результатом выполнения программы будет вывод на экран строки "x=-1, y=-2".

    Не надо думать, что при перегрузке операторов тип возвращаемого значения всегда совпадает с типом класса (для которого происходит перегрузка). Это зависит от конкретной задачи. Вот пример перегрузки оператора !, который возвратит модуль вектора:

     public static double operator !(Vector v)
     {
     double res = Math.Sqrt(v.x*v.x + v.y*v.y);
     return res;
     }

    Здесь мы воспользовались методом Sqrt класса Math для возврата квадратного корня. Sqrt - это статический метод класса Math, поэтому мы вызываем его не для конкретного экземпляра класса, а для самого класса. О статических методах мы поговорим позже, пока же измените тестовый класс Test следующим образом:

     class Test
     {
     static void Main(string[] args)
     {
     Vector a=new Vector(3, 4);
     Console.WriteLine(!a);
     }
     }

    Наша программа должны вывести 5 (длину вектора (3, 4)).