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

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

<b>  // Перегрyзить оператор true.</b>

<b>  public static bool operator true(ThreeD op) {</b>

<b>    if ((op.x != 0) || (op.y != 0) || (op.z != 0))</b>

<b>      return true; // xотя бы одна координата не равна нyлю </b>

<b>    else</b>

<b>      return false;</b>

<b>  }</b>

<b>  // Перегрyзить оператор false.</b>

<b>  public static bool operator false(ThreeD op) {</b>

<b>    if ((op.x == 0) &amp;&amp; (op.y == 0) &amp;&amp; (op.z == 0))</b>

<b>      return true; // все координаты равны нyлю</b>

<b>    else</b>

<b>      return false;</b>

<b>  }</b>

<b>  // Перегрyзить yнарный оператор --. </b>

<b>  public static ThreeD operator --(ThreeD op) {</b>

<b>    ThreeD result = new ThreeD();</b>

<b>    // Возвратить резyльтат декрементирования, </b>

<b>    result.x = op.x - 1;</b>

<b>    result.y = op.y - 1;</b>

<b>    result.z = op.z - 1;</b>

<b>    return result;</b>

<b>  }</b>

<b>  // Вывести координаты X, Y, Z.    •</b>

<b>  public void Show() {</b>

<b>    Console.WriteLine(x + &quot;, &quot; + y + &quot;, &quot; + z);</b>

<b>  }</b>

<b>}</b>

<b>class TrueFalseDemo {</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(0, 0, 0);</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.WriteLine();</b>

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

<b>    else Console.WriteLine(&quot;Точка а ложна.&quot;);</b>

<b>    if (b) Console.WriteLine(&quot;Точка b истинна.&quot;);</b>

<b>    else Console.WriteLine(&quot;Точка b ложна.&quot;);</b>

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

<b>    else Console.WriteLine(&quot;Точка с ложна.&quot;);</b>

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

<b>    Console.WriteLine(&quot;Управление циклом с помощью объекта класса ThreeD.&quot;);</b>

<b>    do {</b>

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

<b>      b--;</b>

<b>    } while (b);</b>

<b>  }</b>

<b>}</b>

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

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

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

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

<b>Точка а истинна </b>

<b>Точка b истинна </b>

<b>Точка с ложна</b>

<b>Управление циклом с помощью объекта класса ThreeD.</b>

<b>10, 10, 10</b>

<b>9, 9, 9 </b>

<b>8, 8, 8 </b>

<b>7, 7, 7 </b>

<b>6, 6, 6 </b>

<b>5, 5, 5 </b>

<b>4, 4, 4 </b>

<b>3, 3, 3 </b>

<b>2, 2, 2 </b>

<b>1, 1, 1</b>

Обратите внимание на то, как объекты класса ThreeD используются для управления условным оператором if и оператором цикла do-while. Так, в операторах if объект типа ThreeD проверяется с помощью оператора true. Если результат этой проверки оказывается истинным, то оператор if выполняется. А в операторе цикла do-while объект b декрементируется на каждом шаге цикла. Следовательно, цикл повторяется до тех пор, пока проверка объекта b дает истинный результат, т.е. этот объект содержит хотя бы одну ненулевую координату. Если же окажется, что объект b содержит все нулевые координаты, его проверка с помощью оператора true даст ложный результат и цикл завершится.