public ThreeD() { х = у = z = 0; }
public ThreeD(int i, int j, int k) { x = i; у = j; z = k; }
// Перегрузить бинарный оператор +.
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 -
}
}
Вот к какому результату приводит выполнение этой программы.
Координаты точки а:
Координаты точки Ь: 10, 10, 10
Результат сложения а+Ь: 11, 12, 13 Результат присваивания i = а: 6
Результат вычисления выражения а * 2 - Ь: -988
Как следует из приведенного выше примера программы, когда объект типаThreeDиспользуется в таком целочисленном выражении, какi=а,происходит его преобразование. В этом конкретном случае преобразование приводит к возврату целого значения 6, которое является произведением координат точкиа,хранящихся в объекте того же названия. Но если для вычисления выражения преобразование в типintне требуется, то оператор преобразования не вызывается. Именно поэтому операторный методoperator int ()
Но для различных целей можно создать разные операторы преобразования. Так, для преобразования объекта типаThreeDв типdoubleможно было бы определить второй оператор преобразования. При этом каждый вид преобразования выполнялся бы автоматически и независимо от другого.