4.2 C#-----------------------------操作符的重載------------------------------------------
操作符一般用於系統預定義的數據類型。如果在類中定義操作符,就稱為操作符重載。
操作符重載包括一元操作符重載和二元操作符重載,以及用戶定義的數據類型轉換。
如果有一個復數Complex 類對一元操作符“++”重載,可以寫成:
1 public static Complex operator ++(Complex a) 2 3 { 4 5 ....................................................... 6 7 }
如果是對二元操作符“+”重載可以寫成:
1 public
一元操作符有一個參數,二元操作符有兩個參數,重載操作符的開始必須以public static 修飾。可以重載的操作符包括:
一元操作符:+、-、!、~、++、--、true、false。
二元操作符:+、-、*、/、 %、 &、 |、^、<<、>>、==、!=、 >、<、 >=、<=。
下面的操作符要求同時重載、不能只重載其中的一個:
一元操作符:true和false。
二元操作符:==和!= >和< >=和<=。
操作符的作用:
操作符重載給類的一些操作帶來一些方便,倆個復數的實部相加運算可以寫成:
1 public static double Add(Complex a,Complex b) 2 3 { 4 5 return a.r+b.r 6 7 }
這樣的寫發不夠簡潔,並且類的成員修飾符不為public時就不能這樣直接操作了。
4.7操作符重載的實現-------------------------------------->>>>>>>>>>>>>>>>>>
先新建一個類:Complex.cs
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace Application27 7 { 8 class Complex 9 { 10 double r, v; 11 public Complex(double r, double v) 12 { 13 this.r = r; 14 this.v = v; 15 16 } 17 //二元操作符“+”重載 18 public static Complex operator +(Complex a, Complex b) { return new Complex(a.r + b.r, a.v + b.v); } 19 20 //一元操作符“-”重載 21 public static Complex operator -(Complex a) 22 { 23 return new Complex(-a.r, -a.v); 24 25 } 26 27 //一元操作符“++”重載 28 public static Complex operator ++(Complex a) 29 { 30 double r = a.r + 1; 31 double v = a.v + 1; 32 return new Complex(r,v); 33 34 } 35 public void Print() 36 { 37 Console.Write(r+" + " +v+ "i\n"); 38 } 39 40 } 41 }
然後在主程序中實現:Test.cs
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace Application27 7 { 8 class Test 9 { 10 public static void Main() 11 { 12 Complex a = new Complex(3, 4); 13 Complex b = new Complex(5,6); 14 15 Complex c = -a; 16 c.Print(); 17 18 Complex d = a + b; 19 d.Print(); 20 a.Print(); 21 22 Complex e = a++; //先賦值後++ 23 a.Print(); 24 e.Print(); 25 26 Complex f = ++a; //先++後賦值 27 a.Print(); 28 f.Print(); 29 } 30 } 31 }
在操作符重載中,返回值往往需要新建(new)一個新建的Complex對象。
另外一個種操作符重載類型是用戶定義的數據類型轉換,它實現不同類型之間的轉換,包括顯示轉換和隱式轉換兩種方式。
編程中往往需要將一個類型轉換成另外一個類型。例如將Int轉換成double, 他們是系統已經預定義的類型,編譯器知道如何來執行他們的轉換,具體內容以後在說吧。
如果他們中間有的類型不是編譯器預定義的類型,編譯器將不知道如何執行轉換,解決的方法是使用用戶定義的數據類型轉換。
如果轉換過程不會因丟失數據而出現異常,就采用隱式轉換。如果轉換過程有可能丟失數據,就要采用顯示轉換。
隱式類型轉換的寫法如下:
4.2 C#-----------------------------操作符的重載------------------------------------------