// Перегрузить бинарный оператор + для сложения объекта
// типа ThreeD и целого значения типа int.
public static ThreeD operator +(ThreeD op1, int op2)
{
ThreeD result = new ThreeD();
result.x = op1.x + op2;
result.у = op1.y + op2;
result.z = op1.z + op2;
return result;
}
_____________________________________________________________________________________
// Перегрузить бинарный оператор + дважды:
// один раз - для сложения объектов класса ThreeD,
// а другой раз — для сложения объекта типа ThreeD и целого значения типа int.
using System;
// Класс для хранения трехмерных координат.
class ThreeD
{
int x, у, z; // трехмерные координаты
public ThreeD() { x = у = 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();
/* Сложить координаты двух точек и возвратить результат. */
result.x = op1.x + op2.x;
result.у = op1.у + op2.у;
result.z = op1.z + op2.z;
return result;
}
// Перегрузить бинарный оператор + для сложения
// объекта типа ThreeD и целого значения типа int.
public static ThreeD operator +(ThreeD op1, int op2)
{
ThreeD result = new ThreeD();
result.x = op1.x + op2;
result.у = op1.у + op2;
result.z = op1.z + op2;
return result;
}
// Вывести координаты X, Y, Z.
public void Show()
{
Console.WriteLine(x + ", " + у + ", " + z);
}
}
class ThreeDDemo
{
static void Main()
{
ThreeD a = new ThreeD(1, 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: ");
с.Show();
Console.WriteLine();
с = b + 10; // сложить объект типа ThreeD и целое значение типа int
Console.Write("Результат сложения b + 10: ");
с.Show();
}
}
Продемонстрированная выше перегрузка оператора +, безусловно, расширяет полезные функции класса ThreeD, тем не менее, она делает это не до конца. И вот почему. Метод operator +(ThreeD, int) позволяет выполнять операции, подобные следующей.
ob1 = оb2 + 10;
Но, к сожалению, он не позволяет выполнять операции, аналогичные следующей.
ob1 = 10 + оb2;
// Перегрузить бинарный оператор + трижды:
// один раз — для сложения объектов класса ThreeD,
// второй раз — для сложения объекта типа ThreeD и целого значения типа int,
// а третий раз — для сложения целого значения типа int и объекта типа ThreeD.
using System;
// Класс для хранения трехмерных координат.
class ThreeD
{
int x, y, z; // трехмерные координаты
public ThreeD() { x = y = z = 0; }
public ThreeD(int i, int j, int k) { x = i; y = j; z = k; }
// Перегрузить бинарный оператор + для сложения объектов класса ThreeD.
public static ThreeD operator +(ThreeD op1, ThreeD op2)
{
ThreeD result = new ThreeD();
/* Сложить координаты двух точек и возвратить результат. */
result.x = op1.x + op2.x;
result.y = op1.y + op2.y;
result.z = op1.z + op2.z;
return result;
}
// Перегрузить бинарный оператор + для сложения
// объекта типа ThreeD и целого значения типа int.
public static ThreeD operator +(ThreeD op1, int op2)
{
ThreeD result = new ThreeD();
result.x = op1.x + op2;
result.y = op1.y + op2;
result.z = op1.z + op2;
return result;
}
// Перегрузить бинарный оператор + для сложения
// целого значения типа int и объекта типа ThreeD.
public static ThreeD operator +(int op1, ThreeD op2)
{
ThreeD result = new ThreeD();
result.x = op2.x + op1;
result.y = op2.y + op1;
result.z = op2.z + op1;
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; // сложить объекты класса ThreeD
Console.Write("Результат сложения a + b: ");
c.Show();
Console.WriteLine();
c = b + 10; // сложить объект типа ThreeD и целое значение типа int
Console.Write("Результат сложения b + 10: ");
c.Show();
Console.WriteLine();
c = 15 + b; // сложить целое значение типа int и объект типа ThreeD
Console.Write("Результат сложения 15 + b: ");
c.Show();
}
}