result.y = -op.y;
result.z = -op.z;
return result;
}
// Перегрузить унарный оператор ++.
public static ThreeD operator ++(ThreeD op) {
ThreeD result = new ThreeD();
// Возвратить результат инкрементирования,
result.x = op.x + 1;
result.y = op.y + 1;
result.z = op.z + 1;
return result;
}
// Вывести координаты X, Y, Z.
public void Show() {
Console.WriteLine(x + ", " + y + ", " + z);
}
}
class ThreeDDemo {
static void Main() {
ThreeD a = new ThreeD(1, 2, 3);
ThreeD b = new ThreeD(10, 10, 10);
ThreeD c = new ThreeD();
Console.Write("Координаты точки a: ");
a.Show();
Console.WriteLine();
Console.Write("Координаты точки b: ");
b.Show();
Console.WriteLine();
c = a + b; // сложить координаты точек а и b
Console.Write("Результат сложения a + b: ");
c.Show();
Console.WriteLine();
c = a + b + c; // сложить координаты точек a, b и с
Console.Write("Результат сложения a + b + с: ");
c.Show();
Console.WriteLine();
c = c - a; // вычесть координаты точки а
Console.Write("Результат вычитания с - а: ");
c.Show();
Console.WriteLine();
c = c - b; // вычесть координаты точки b
Console.Write("Результат вычитания с - b: ");
c.Show();
Console.WriteLine();
c = -a; // присвоить точке с отрицательные координаты точки
Console.Write("Результат присваивания -а: ");
c.Show();
Console.WriteLine();
c = a++; // присвоить точке с координаты точки а,
// а затем инкрементировать их
Console.WriteLine("Если с = а++");
Console.Write("то координаты точки с равны ");
c.Show();
Console.Write("а координаты точки а равны ");
a.Show();
// Установить исходные координаты (1,2,3) точки а
a = new ThreeD(1, 2, 3);
Console.Write("\nУстановка исходных координат точки а: ");
a.Show();
c = ++a; // инкрементировать координаты точки а,
// а затем присвоить их точке с
Console.WriteLine("\nЕсли с = ++а");
Console.Write("то координаты точки с равны "); c.Show();
Console.Write("а координаты точки а равны "); a.Show();
}
}
Вот к какому результату приводит выполнение данной программы.
Координаты точки а: 1, 2, 3
Координаты точки b: 10, 10, 10
Результат сложения а + b: 11, 12, 13
Результат сложения а + b + с: 22, 24, 26
Результат вычитания с - а: 21, 22, 23
Результат вычитания с - b: 11, 12, 13
Результат присваивания -а: -1, -2, -3
Если с = а++
то координаты точки с равны 1, 2, 3
а координаты точки а равны 2, 3, 4
Установка исходных координат точки а: 1, 2, 3
Если с = ++а
то координаты точки с равны 2, 3, 4
а координаты точки а равны 2, 3, 4
Выполнение операций со встроенными в C# типами данных
Для любого заданного класса и оператора имеется также возможность перегрузить сам операторный метод. Это, в частности, требуется для того, чтобы разрешить операции с типом класса и другими типами данных, в том числе и встроенными. Вновь обратимся к классу ThreeD. На примере этого класса ранее было показано, как оператор + перегружается для сложения координат одного объекта типа ThreeDс координатами другого. Но это далеко не единственный способ определения операции сложения для класса ThreeD. Так, было бы не менее полезно прибавить целое значение к каждой координате объекта типа ThreeD. Подобная операция пригодилась бы для переноса осей координат. Но для ее выполнения придется перегрузить оператор + еще раз, как показано ниже.
// Перегрузить бинарный оператор + для сложения объекта
// типа ThreeD и целого значения типа int.
Читать дальше