Основы 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)). |