技术开发 频道

关于运算符重载


【IT168技术文档】

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); }
  以上代码如果不调用,则可以编译通过;但是如果调用,则编译期报错:
Class3D d3 = new Class3D(1, 2, 3); Class2D d2 = new Class2D(11, 12); Class2D newD2 = d2 + d3;
  原因是最后一句,因为参与运算的Class3D和Class2D都提供了+(Class2D d2, Class3D d3) 的重载,编译器不知道应该使用那一个,当然会报错了。
0
相关文章