// Класс для хранения трехмерных координат.
class ThreeD {
int х, у, z; // трехмерные координаты
public ThreeD { x = y = z = 0; }
public ThreeD(int i, int j, int k) { x = i; у = j; z = k; }
// Перегрузить бинарный оператор + для сложения объектов класса ThreeD.
public static ThreeD operator +(ThreeD op1, ThreeD op2)
{
ThreeD result = new ThreeD;
/
class ThreeDDemo { static void Main { ThreeD a = new ThreeD(l, 2, 3); ThreeD b = new ThreeD(10, 10, 10); ThreeD с = new ThreeD; Console.Write("Координаты точки a: "); a.Show; Console.WriteLine; Console.Write("Координаты точки b: "); b.Show; Console.WriteLine; с = a + b; // сложить объекты класса ThreeD Console.Write("Результат сложения a + b: "); c.Show; Console.WriteLine; c = b + 10; // сложить объект типа ThreeD и целое значение типа int Console.Write("Результат сложения b + 10: "); с.Show; Console.WriteLine; с = 15 + b; // сложить целое значение типа int и объект типа ThreeD Console.Write("Результат сложения 15 + b: "); с.Show; }
} Выполнение этого кода дает следующий результат.
Координаты точки а: 1, 2, 3 Координаты точки b: 10, 10, 10 Результат сложения а + b: 11, 12, 13 Результат сложения b + 10: 20, 20, 20 Результат сложения 15 + b: 25, 25, 25 ### Перегрузка операторов отношения Операторы отношения, например == и <, могут также перегружаться, причем очень просто. Как правило, перегруженный оператор отношения возвращает ло гическое значение true и false. Это вполне соответствует правилам обычного применения подобных операторов и дает возможность использовать их перегру жаемые разновидности в условных выражениях. Если же возвращается результат другого типа, то тем самым сильно ограничивается применимость операторов от ношения. Ниже приведен очередной вариант класса ThreeD, в котором перегружаются операторы < и >. В данном примере эти операторы служат для сравнения объектов ThreeD, исходя из их расстояния до начала координат. Один объект считается больше другого, если он находится дальше от начала координат. А кроме того, один объект считается меньше другого, если он находится ближе к началу координат. Такой вари ант реализации позволяет, в частности, определить, какая из двух заданных точек на ходится на большей сфере. Если же ни один из операторов не возвращает логическое значение true, то обе точки находятся на одной и той же сфере. Разумеется, возможны и другие алгоритмы упорядочения.
// Перегрузить операторы < и >. using System;
// Класс для хранения трехмерных координат.
class ThreeD {
int х, у, z; // трехмерные координаты
public ThreeD { х = у = z = 0; }
public ThreeD(int i, int j, int k) { x = i; у = j; z = k; }
// Перегрузить оператор <.
public static bool operator <(ThreeD op1, ThreeD op2)
{
if(Math.Sqrt(op1.x