c#實現算術運算子的重載(關鍵字operator)

來源:互聯網
上載者:User
還是看代碼,比較直接,裡面有詳細的描述,應該能看懂。

/*
 * 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)
    }
}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.