c#实现逻辑运算符的重载(关键字operator)

继续看代码
/*
 * Created by SharpDevelop.
 * User: noo
 * Date: 2009-9-1
 * Time: 11:45
 * 
 * 运算符,如+,-,*,/,==,!=,>,<等,只是对系统预定义的数据类型,如int,float,double,string等,进行的一些操作
 * 比如说:系统可以识别int+int,string+string,float>float等,这是因为系统在这些数据类型中对这些运算符作了重载
 * 也就是写了实现的代码,不然代码是不能通过编译的。但是如果我们自己定义了一个类(如向量类Vector),能否实现诸如+,-,>,<的运算符呢?
 * 这是不可能的所以这个时候就需要我们告诉计算机"+"在这个类(Vector)中代表的意思是什么,计算机应该怎样操作Vector+Vector
 * 这就涉及到运算符的重载问题
 * 
 * 自定义类(向量类)的逻辑运算符的重载
 
*/
using  System ;
class  Vector // 向量类
{
    
private   double  X,Y,Z;
    
public  Vector( double  x, double  y, double  z) // 向量的x,y,z坐标
    {
        
this .X  = x;
        
this .Y  = y;
        
this .Z  = z;
    }
    
public   static   bool   operator   == (Vector v1,Vector v2) // 判断两个向量是否相等
    {
        
return  (v1.X  == v2.X  &&  v1.Y  == v2.Y  &&  v1.Z  == v2.Z);
    }
    
public   static   bool   operator   != (Vector v1,Vector v2) // 判断两个向量是否不等,并且这个同上面一个重载必须同时出现,也就是说这两个重载要成对出现。
    {
        
return   ! (v1 == v2); // 同下面一句等价
//         return (v1.X !=v2.X || v1.Y !=v2.Y ||v1.Z !=v2.Z );
    }
    
public   static   bool   operator   > (Vector v1,Vector v2) // 判断向量v1是否大于向量v2
    {
        
return  (v1.X  > v2.X  &&  v1.Y  > v2.Y  &&  v1.Z  > v2.Z );
    }
    
public   static   bool   operator   < (Vector v1,Vector v2) // 判断向量v1是否小于向量v2,同样这两个重载必须成对出现
    {
        
return   ! (v1 > v2); // 同下面一句等价
//         return (v1.X <v2.X && v1.Y <v2.Y && v1.Z <v2.Z );
    }
    
    
// 下面两个重载函数不会影响编译的结果,但如果不写总会会提示说没有重载这两个函数,所以还是加上来。这个同算术运算符稍有不同
     public   override   bool  Equals( object  obj)
    {
        
return   base .Equals(obj);
    }
    
public   override   int  GetHashCode()
    {
        
return   base .GetHashCode();
    }
}
class  test
{
    
static   void  Main()
    {
        Vector vec1
= new  Vector ( 4 , 5 , 6 );
        Vector vec2
= new  Vector ( - 8 , 2 , 0 );
        Console.WriteLine (vec1
== vec2); // 输出false
        Console.WriteLine (vec1 > vec2); // 输出true
    }
}

转载于:https://www.cnblogs.com/gisland/archive/2009/09/01/1558023.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值