Меню сайта
Категории раздела
HTML [44] |
Visual C++ и MFC [21] |
c++ [78] |
php [19] |
Javascript [15] |
C# [51] |
загрузки [0] |
XNA
[10]
создание игр с помощью xna
|
Наш опрос
Друзья сайта
Статистика
Онлайн всего: 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)). | |
Просмотров: 768 | Рейтинг: 0.0/0 |
Всего комментариев: 0 | |