/*
* 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
}
}
* 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
}
}