Добавить в цитаты Настройки чтения

Страница 123 из 502

<b>class ThreeDDemo {</b>

<b>  static void Main() {</b>

<b>    ThreeD a = new ThreeD(5, 6, 7);</b>

<b>    ThreeD b = new ThreeD(10, 10, 10);</b>

<b>    ThreeD c = new ThreeD(1, 2, 3);</b>

<b>    ThreeD d = new ThreeD(6, 7, 5);</b>

<b>    Console.Write(&quot;Координаты точки a: &quot;);</b>

<b>    a.Show();</b>

<b>    Console.Write(&quot;Координаты точки b: &quot;);</b>

<b>    b.Show();</b>

<b>    Console.Write(&quot;Координаты точки с: &quot;);</b>

<b>    c.Show();</b>

<b>    Console.Write(&quot;Координаты точки d: &quot;);</b>

<b>    d.Show();</b>

<b>    Console.WriteLine();</b>

<b>    if (a &gt; c) Console.WriteLine(&quot;а &gt; с истинно&quot;);</b>

<b>    if (a &lt; c) Console.WriteLine(&quot;а &lt; с истинно&quot;);</b>

<b>    if (a &gt; b) Console.WriteLine(&quot;а &gt; b истинно&quot;);</b>

<b>    if (a &lt; b) Console.WriteLine(&quot;а &lt; b истинно&quot;);</b>

<b>    if (a &gt; d) Console.WriteLine(&quot;а &gt; d истинно&quot;);</b>

<b>    else if (a &lt; d) Console.WriteLine(&quot;a &lt; d истинно&quot;);</b>

<b>    else Console.WriteLine(&quot;Точки a и d находятся на одном расстоянии &quot; +</b>

<b>                 &quot;от начала отсчета&quot;);</b>

<b>  }</b>

<b>}</b>

Вот к какому результату приводит выполнение этого кода.

<b>Координаты точки a: 5, 6, 7</b>

<b>Координаты точки b: 10, 10, 10</b>

<b>Координаты точки c: 1, 2, 3</b>

<b>Координаты точки d: 6, 7, 5</b>

<b>а &gt; с истинно </b>

<b>а &lt; b истинно</b>

<b>Точки and находятся на одном расстоянии от начала отсчета</b>

На перегрузку операторов отношения накладывается следующее важное ограничение: они должны перегружаться попарно. Так, если перегружается оператор <, то следует перегрузить и оператор >, и наоборот. Ниже приведены составленные в пары перегружаемые операторы отношения.

<b>==      !=</b>

<b>&lt;       &gt;</b>

<b>&lt;=      &gt;=</b>

И еще одно замечание: если перегружаются операторы == и !=, то для этого обычно требуется также переопределить методы Object.Equals() и Object.GetHashCode(). Эти методы и способы их переопределения подробнее рассматриваются в главе 11.

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

Ключевые слова true и false можно также использовать в качестве унарных операторов для целей перегрузки. Перегружаемые варианты этих операторов позволяют определить назначение ключевых слов true и false специально для создаваемых классов. После перегрузки этих ключевых слов в качестве унарных операторов для конкретного класса появляется возможность использовать объекты этого класса для управления операторами if, while, for и do-while или же в условном выражении ?.

Операторы true и false должны перегружаться попарно, а не раздельно. Ниже приведена общая форма перегрузки этих унарных операторов.

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

<b>{</b>

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

<b>}</b>

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

<b>{</b>

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

<b>}</b>

Обратите внимание на то, что и в том и в другом случае возвращается результат типа bool.

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

<b>// Перегрyзить операторы true и false для класса ThreeD. </b>

<b>using System;</b>

<b>// Класс для xранения треxмерныx координат, </b>

<b>class ThreeD {</b>

<b>  int x, y, z; // треxмерные координаты</b>

<b>  public ThreeD() { x = y = z = 0; }</b>

<b>  public ThreeD(int i, int j, int k) { x = i; y = j; z = k; }</b>