Операторы отношения, например == и <, могут также перегружаться, причем очень просто. Как правило, перегруженный оператор отношения возвращает логическое значениеtrueиfalse.Это вполне соответствует правилам обычного применения подобных операторов и дает возможность использовать их перегружаемые разновидности в условных выражениях. Если же возвращается результат другого типа, то тем самым сильно ограничивается применимость операторов отношения.
Ниже приведен очередной вариант классаThreeD,в котором перегружаются операторы < и >. В данном примере эти операторы служат для сравнения объектовThreeD,исходя из их расстояния до начала координат. Один объект считается больше другого, если он находится дальше от начала координат. А кроме того, один объект считается меньше другого, если он находится ближе к началу координат. Такой вариант реализации позволяет, в частности, определить, какая из двух заданных точек находится на большей сфере. Если же ни один из операторов не возвращает логическое значениеtrue,то обе точки находятся на одной и той же сфере. Разумеется, возможны и другие алгоритмы упорядочения.
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 истинно");