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

public static ThreeD operator +(ThreeD opl, ThreeD op2)

{

ThreeD result = new ThreeD();

result.x    =    opl.x    +    op2.x;

result.у    =    opl.y    +    op2.y;

result.z    =    opl.z    +    op2.z;

return result;

}

// Неявное преобразование объекта типа ThreeD к типу int. public static implicit operator int (ThreeD opl)

{

return opl.x * opl.y * opl.z;

}

// Вывести координаты X, Y, Z. public void Show()

{

Console.WriteLine(x + ', ' + у + ',    '    +    z)    ;

}

}

class ThreeDDemo { static void Main() {

ThreeD a = new ThreeD(1, 2, 3);

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

ThreeD с = new ThreeD(); int i;

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

a.Show();

Console.WriteLine() ;

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

b.Show();

Console.WriteLine();

с = a + b; // сложить координаты точек а и b Console.Write('Результат сложения a + b: ');

c.Show    ();

Console.WriteLine(); i = a; // преобразовать в тип int

Console.WriteLine('Результат присваивания i = a: ' + i) ; Console.WriteLine();

i=a*2-b; // преобразовать в тип int

Console.WriteLine('Результат вычисления выражения a * 2 -

}

}

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

Координаты точки а: 1, 2, 3

Координаты точки Ь: 10, 10, 10

Результат сложения а+Ь: 11, 12, 13 Результат присваивания i = а: 6

Результат вычисления выражения а * 2 - Ь: -988

Как следует из приведенного выше примера программы, когда объект типа ThreeD используется в таком целочисленном выражении, как i = а, происходит его преобразование. В этом конкретном случае преобразование приводит к возврату целого значения 6, которое является произведением координат точки а, хранящихся в объекте того же названия. Но если для вычисления выражения преобразование в тип int не требуется, то оператор преобразования не вызывается. Именно поэтому операторный метод operator int () не вызывается при вычислении выражения с = а + Ь.

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

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату