Среда, 08.01.2025, 20:05
Главная Регистрация RSS поиск
Приветствую Вас, Гость
Меню сайта
Категории раздела
HTML [44]
Visual C++ и MFC [21]
c++ [78]
php [19]
Javascript [15]
C# [51]
загрузки [0]
XNA [10]
создание игр с помощью xna
Наш опрос
Каким языком программирования вы увлекаетесь
Всего ответов: 2420
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Реклама
Главная » Статьи » 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)).
Категория: C# | Добавил: SLOT85 (07.02.2012)
Просмотров: 768 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]