繼續看代碼
/*
* 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
}
}