还是看代码,比较直接,里面有详细的描述,应该能看懂。
/*
* 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)
}
}