以一个结构Vector,来说明运算符重载,这个Vector结构表示一个三维矢量三维矢量只是3个double数字的一个
集合,说明物体和原点之间的距离,表示数字的变量是x、 y和x表示物体与原点在x方向上的
距离,y表示它与原点在y方向上的距离,z表示高度。把这3个数字组合起来,就得到总距离。例
如(3.0,3.0,1.0)表示物体与原点在x方向上的距离是3个单位,与原点在y方向上的距离是
3个单位,高度为1个单位。矢量可以与矢量或数字相加或相乘。这与使用Vector结构的方式一样。
下面是Vector的定义包含成员字段、构造函数和重写的一个toString()方法,以便轻松地
查看VeGtor的内容,最后是运算符重载:
namespace Wrox.PrOCsharp.ooCsharp
struct Vector
{
public double x, y, z;
public Vector(double x, double y, doub1e z)
{
this.x=x;
this.y= y;
this.z = z;
}
public Vector(Vector rhs)
{
x= rhs.x;
y= rhs.y;
z = rhs. z;
}
public override string Tostring()
{
return "("+x+"."+y+"."+z+")";
}
}
下面是Vector结构的有趣部分
——
为
“
+” 运算符提供支持的运算符重载:
public static Vector operator + (Vector lhs, Vector rhs)
{
Vector result = neW Veotor(lhs);
result.x += rhs.X;
result.y += rhs.y;
result.z += rhs.z;
return result;′
}
这部分代码与声明方法的代码完全相同,显然,它返回一个矢量,其中包含前面定义的lhs和 .
rhs的和,即把x、 y和z成员分别相加。
下面需要编写一些简单的代码来测试Vector结构:
static Void Main()
{
vector vect1, VeCt2`,Vect3;
vect1 = new Vector(3.0, 3.0, 1.0);
vect2 = new Vector(2.0,-4.0,-4.0);
vect3 =vect1 +vect2;
Console.WriteLine( “vect1 = “+ vect1.Tostring());
Console.WriteLine( “vect2 = “+ veot2.Tostring());
Console.WriteLine( “vect3 = “+ vect3.ToString());
}
把这些代码另存为Vectors.cs,编译并运行它,结果如下
vect1 = ( 3, 3,1 )
vect2 = ( 2,4.,-4 )
vect3 = ( 5,-1,-3 )