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

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

<b>Установка исходных координат точки а: 1, <i>2,</i> 3 </b>

<b>Если с = ++а </b>

<b>то координаты точки с равны <i>2,</i> 3, 4 </b>

<b>а координаты точки а равны <i>2,</i> 3, 4</b>

Выполнение операций со встроенными в C# типами данных

Для любого заданного класса и оператора имеется также возможность перегрузить сам операторный метод. Это, в частности, требуется для того, чтобы разрешить операции с типом класса и другими типами данных, в том числе и встроенными. Вновь обратимся к классу ThreeD. На примере этого класса ранее было показано, как оператор + перегружается для сложения координат одного объекта типа ThreeD с координатами другого. Но это далеко не единственный способ определения операции сложения для класса ThreeD. Так, было бы не менее полезно прибавить целое значение к каждой координате объекта типа ThreeD. Подобная операция пригодилась бы для переноса осей координат. Но для ее выполнения придется перегрузить оператор + еще раз, как показано ниже.

<b>// Перегрузить бинарный оператор + для сложения объекта</b>

<b>// типа ThreeD и целого значения типа int.</b>

<b>public static ThreeD operator +(ThreeD op1, int op2)</b>

<b>{</b>

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

<b>  result.x = op1.x + op2; </b>

<b>  result.у = op1.y + op2; </b>

<b>  result.z = op1.z + op2;</b>

<b>  return result;</b>

<b>}</b>

Как видите, второй параметр операторного метода имеет тип int. Следовательно, в этом методе разрешается сложение целого значения с каждым полем объекта типа ThreeD. Такая операция вполне допустима, потому что, как пояснялось выше, при перегрузке бинарного оператора один из его операндов должен быть того же типа, что и класс, для которого этот оператор перегружается. Но у второго операнда этого оператора может быть любой другой тип.

Ниже приведен вариант класса ThreeD с двумя перегружаемыми методами оператора +.

<b>// Перегрузить бинарный оператор + дважды:</b>

<b>// один раз — для сложения объектов класса ThreeD,</b>

<b>// а другой раз — для сложения объекта типа ThreeD и целого значения типа int. </b>

<b>using System;</b>

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

<b>class ThreeD {</b>

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

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

<b>  public ThreeD(int i, int j, int k) {</b>

<b>    x = i;</b>

<b>    y = j;</b>

<b>    z = k;</b>

<b>  }</b>

<b>  // Перегрузить бинарный оператор +.</b>

<b>  public static ThreeD operator +(ThreeD op1, ThreeD op2) {</b>

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

<b>    /* Сложить координаты двух точек и возвратить результат. */</b>

<b>    result.x = op1.x + op2.x;</b>

<b>    result.y = op1.y + op2.y;</b>

<b>    result.z = op1.z + op2.z;</b>

<b>    return result;</b>

<b>  }</b>

<b>  // Перегрузить бинарный оператор + для сложения </b>

<b>  // объекта типа ThreeD и целого значения типа int. </b>

<b>  public static ThreeD operator +(ThreeD op1, int op2) {</b>

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

<b>    result.x = op1.x + op2;</b>

<b>    result.y = op1.y + op2;</b>

<b>    result.z = op1.z + op2;</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 ThreeDDemo {</b>

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

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

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

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

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

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

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

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

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