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

Автор: admin | 14 Июнь 2008 – 16:04 -


Урок 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)).


Tags: , , , , , , ,
Находится в Уроки C# | No Comments »

Ответить

Вы должны быть в системе, дабы комментировать.


C# — язык программирования, сочетающий объектно-ориентированные и аспектно-ориентированные концепции. Разработан в 1998—2001 годах группой инженеров под руководством Андерса Хейлсберга в компании Microsoft как основной язык разработки приложений для платформы Microsoft .NET. Компилятор с C# входит в стандартную установку самой .NET, поэтому программы на нём можно создавать и компилировать даже без инструментальных средств вроде Visual Studio. требуется няня для ребенка C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к С++ и Java. Язык имеет строгую статическую типизацию, поддерживает полиморфизм, перегрузку операторов, указатели на функции-члены классов, атрибуты, события, свойства, исключения, комментарии в формате XML. Переняв многое от своих предшественников — языков С++, Java, Delphi, Модула и Smalltalk — С#, опираясь на практику их использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем: так, C# не поддерживает множественное наследование классов (в отличие от C++).