C# 4.0 полное руководство - 2011
Шрифт:
{
ThreeD result = new ThreeD;
result.x = op2.x + opl; result.у = op2.y + opl; result.z = op2.z + opl;
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
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 ;
c=15+b; // сложить целое значение типа int и объект типа ThreeD Console.Write("Результат сложения 15 + b: ");
с.Show;
}
}
Выполнение этого кода дает следующий результат.
Координаты точки а: 1, 2, 3
Координаты точки b: 10, 10, 10 Результат сложения а + Ь: 11, 12, 13 Результат сложения b + 10: 20, 20, 20 Результат сложения 15 + Ь: 25, 25, 25
Перегрузка операторов отношения
Операторы отношения, например == и <, могут также перегружаться, причем очень просто. Как правило, перегруженный оператор отношения возвращает логическое значение true и false. Это вполне соответствует правилам обычного применения подобных операторов и дает возможность использовать их перегружаемые разновидности в условных выражениях. Если же возвращается результат другого типа, то тем самым сильно ограничивается применимость операторов отношения.
Ниже приведен очередной вариант класса ThreeD, в котором перегружаются операторы < и >. В данном примере эти операторы служат для сравнения объектов ThreeD, исходя из их расстояния до начала координат. Один объект считается больше другого, если он находится дальше от начала координат. А кроме того, один объект считается меньше другого, если он находится ближе к началу координат. Такой вариант реализации позволяет, в частности, определить, какая из двух заданных
I/ Перегрузить операторы < и >. 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; }
// Перегрузить оператор <.
public static bool operator < (ThreeD opl, ThreeD op2)
{
if(Math.Sqrt(opl.x * opl.x + opl.у * opl.у + opl.z * opl.z) <
Math.Sqrt(op2.x * op2.x + op2.у * op2.y + op2.z * op2.z))
return true; else
return false;
}
// Перегрузить оператор >.
public static bool operator >(ThreeD opl, ThreeD op2)
{
if(Math.Sqrt(opl.x * opl.x + opl.у * opl.у + opl.z * opl.z) >
Math.Sqrt(op2.x * op2.x + op2.у * op2.y + op2.z * op2.z))
return true; else
return false;
}
// Вывести координаты X, Y, Z. public void Show
{
Console.WriteLine(x + ”, " + у + ", " + z) ;
}
}
class ThreeDDemo { static void Main {
Console.Write("Координаты точки a: ")
a.Show;
Console.Write("Координаты точки b: ")
b.Show;
Console.Write("Координаты точки с: ")
c.Show;
Console.Write("Координаты точки d: ")
d. Show;
Console.WriteLine;
if(а > с) Console.WriteLine("а > с истинно");
if(а < с) Console.WriteLine("а < с истинно");
if(а > b) Console.WriteLine("а > b истинно");
if (а < b)-Console.WriteLine("а < b истинно");
if(а > d) Console.WriteLine("а > d истинно");
else if(а < d) Console.WriteLine("a < d истинно");