关于运算符重载

 

    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(123);
            Class2D d2 
= new Class2D(1112);

            Class2D newD2 
= d2 + d3;
原因是最后一句,因为参与运算的Class3D和Class2D都提供了
+(Class2D d2, Class3D d3)
的重载,编译器不知道应该使用那一个,当然会报错了。

所以得出一个结论:想搞死编译器不是那么容易的哦!


posted @ 2008-05-02 09:42 包建强 阅读(91) 评论(0)  编辑 收藏 所属分类: .NET C#

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
 
另存  打印