继续看代码
/*
* 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
}
}