Перегрузка операторов true и false

Ключевые слова true и false можно также использовать в качестве унарных операторов для целей перегрузки. Операторы true и false должны перегружаться попарно, а не раздельно.

public static bool operator true(тип_параметра операнд)

{

// Возврат логического значения true или false.

}

public static bool operator false(тип_параметра операнд)

{

// Возврат логического значения true или false.

}

Ниже приведен пример программы, демонстрирующий реализацию операторов true и false в классе ThreeD. В каждом из этих операторов проверяется следующее условие: если хотя бы одна из координат объекта типа ThreeD равна нулю, то этот объект истинен, а если все три его координаты равны нулю, то такой объект ложен. В данном примере программы реализован также оператор декремента исключительно в целях демонстрации.

//перегрузить операторы < and >.

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; }

// Перегрузить оператор true.

public static bool operator true(ThreeD op)

{

if ((op.x!= 0) || (op.y!= 0) || (op.z!= 0))

return true; // хотя бы одна координата не равна нулю

else

return false;

}

// Перегрузить оператор false.

public static bool operator false(ThreeD op)

{

if ((op.x == 0) && (op.y == 0) && (op.z == 0))

return true; // все координаты равны нулю

else

return false;

}

// Перегрузить унарный оператор --.

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 TrueFalseDemo

{

static void Main()

{

ThreeD a = new ThreeD(5, 6, 7);

ThreeD b = new ThreeD(10, 10, 10);

ThreeD c = new ThreeD(0, 0, 0);

Console.Write("Координаты точки a: ");

a.Show();

Console.Write("Координаты точки b: ");

b.Show();

Console.Write("Координаты точки с: ");

c.Show();

Console.WriteLine();

if (a) Console.WriteLine("Точка а истинна.");

else Console.WriteLine("Точка а ложна.");

if (b) Console.WriteLine("Точка b истинна.");

else Console.WriteLine("Точка b ложна.");

if (c) Console.WriteLine("Точка с истинна.");

else Console.WriteLine("Точка с ложна.");

Console.WriteLine();

Console.WriteLine("Управление циклом с помощью объекта класса ThreeD.");

do

{

b.Show();

b--;

}

while (b);

}

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: