1. 程式人生 > >4.2 C#-----------------------------操作符的重載------------------------------------------

4.2 C#-----------------------------操作符的重載------------------------------------------

int space 一個 轉換 ati esp 同時 操作符 .text

操作符一般用於系統預定義的數據類型。如果在類中定義操作符,就稱為操作符重載。

操作符重載包括一元操作符重載和二元操作符重載,以及用戶定義的數據類型轉換。

  如果有一個復數Complex 類對一元操作符“++”重載,可以寫成:

1 public static Complex operator ++(Complex a)
2 
3 {
4 
5 .......................................................
6 
7 }

如果是對二元操作符“+”重載可以寫成:

1 public

static Complex operator +(Complex a,Complex b) 2 { 3 ............... 4 }

一元操作符有一個參數,二元操作符有兩個參數,重載操作符的開始必須以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#-----------------------------操作符的重載------------------------------------------