关于运算符重载
class Class2D
{
public Class2D(int A, int B)
{
this.A = A;
this.B = B;
}
public int A;
public int B;
public static Class2D operator +(Class2D d2, Class3D d3)
{
return new Class2D(d2.A + d3.A, d2.B + d3.B);
}
}
class Class3D
{
public Class3D(int A, int B, int C)
{
this.A = A;
this.B = B;
this.C = C;
}
public int A;
public int B;
public int C;
public static Class3D operator +(Class3D d3, Class2D d2)
{
return new Class3D(d3.A + d2.A, d3.B + d2.B, d3.C);
}
public static Class2D operator +(Class2D d2, Class3D d3)
{
return new Class2D(d2.A + d3.A, d2.B + d3.B);
}
{
public Class2D(int A, int B)
{
this.A = A;
this.B = B;
}
public int A;
public int B;
public static Class2D operator +(Class2D d2, Class3D d3)
{
return new Class2D(d2.A + d3.A, d2.B + d3.B);
}
}
class Class3D
{
public Class3D(int A, int B, int C)
{
this.A = A;
this.B = B;
this.C = C;
}
public int A;
public int B;
public int C;
public static Class3D operator +(Class3D d3, Class2D d2)
{
return new Class3D(d3.A + d2.A, d3.B + d2.B, d3.C);
}
public static Class2D operator +(Class2D d2, Class3D d3)
{
return new Class2D(d2.A + d3.A, d2.B + d3.B);
}
以上代码如果不调用,则可以编译通过;但是如果调用,则编译期报错:
Class3D d3 = new Class3D(1, 2, 3);
Class2D d2 = new Class2D(11, 12);
Class2D newD2 = d2 + d3;
原因是最后一句,因为参与运算的Class3D和Class2D都提供了Class2D d2 = new Class2D(11, 12);
Class2D newD2 = d2 + d3;
+(Class2D d2, Class3D d3)
的重载,编译器不知道应该使用那一个,当然会报错了。
所以得出一个结论:想搞死编译器不是那么容易的哦!