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

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   override   string  ToString() // 重写ToSting方法
    {
        
string  strResult = " ( " + this .X   + " , " + this .Y   + " , " + this .Z  + " ) " ;
        
return  strResult;
    }
    
public   static  Vector  operator   + (Vector v1,Vector v2) // 对"+"运算符的重载,修饰符一定是public 和static
    {
        
return   new  Vector (v1.X  + v2.X ,v1.Y  + v2.Y ,v1.Z  + v2.Z );
    }
    
public   static  Vector  operator   - (Vector v1,Vector v2) // 向量相减
    {
        
return   new  Vector (v1.X  - v2.X ,v1.Y  - v2.Y ,v1.Z  - v2.Z );
    }
    
public   static   double   operator   * (Vector v1,Vector v2) // 内积
    {
        
return  v1.X  * v2.X  + v1.Y  * v2.Y  + v1.Z  * v2.Z ;
    }
    
public   static  Vector  operator   * (Vector v, double  d) // 向量与数字相乘
    {
        
return   new  Vector (v.X   * d,v.Y  * d,v.Z  * d);
    }
    
public   static  Vector  operator   * ( double  d,Vector v)
    {
        
return  v * d; // 简单的写法,也可以写下面一句
//         return new Vector (v.X  *d,v.Y *d,v.Z *d);
    }
    
public   static  Vector  operator   / (Vector v, double  d) // 向量与数字相除
    {
        
return   new  Vector (v.X  / d,v.Y / d,v.Z  / d);
    }
}
class  test
{
    
static   void  Main()
    {
        Vector vec1
= new  Vector ( 4 , 5 , 6 );
        Vector vec2
= new  Vector ( - 8 , 7 , 0 );
        Console.WriteLine (vec1
+ vec2); // 调用Vector类重载的ToString方法 ,输出(-4,12,6)
        Console.WriteLine (vec1 - vec2); // 调用Vector类重载的ToString方法 ,输出(12,-2,6)
        Console.WriteLine (vec1 * vec2); // 调用double结构重载的ToString方法 ,输出3
        Console.WriteLine (vec1 * 4 ); // 调用Vector类重载的ToString方法 ,输出(16,20,24)
        Console.WriteLine ( 4 * vec1); // 调用Vector类重载的ToString方法 ,输出(16,20,24)
        Console.WriteLine (vec1 / 5 ); // 调用Vector类重载的ToString方法 ,输出(0.8,1,1.2)
        vec1 += vec2; // 注意这里引用的"+="不需要在Vector类中重载,因为编译器默认会执行vec1=vec1+vec2
        Console.WriteLine (vec1);//输出(-4,12,6)
    }
}

转载于:https://www.cnblogs.com/ChenMingYing/archive/2010/07/07/1772999.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值