自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C#運(yùn)算符重載概念及應(yīng)用詳解

開(kāi)發(fā) 后端
C#運(yùn)算符重載概念及應(yīng)用是指什么呢?本文向你介紹了C#運(yùn)算符重載的概念以及具體的實(shí)例演示。希望對(duì)你有所幫助。

什么是C#運(yùn)算符重載?

所謂運(yùn)算符重載,就是對(duì)已有的運(yùn)算符重新進(jìn)行定義,賦予其另一種功能,以適應(yīng)不同的數(shù)據(jù)類(lèi)型。

自定義類(lèi)的賦值運(yùn)算符重載函數(shù)的作用與內(nèi)置賦值運(yùn)算符的作用類(lèi)似,但是要要注意的是,它與拷貝構(gòu)造函數(shù)與析構(gòu)函數(shù)一樣,要注意深拷貝淺拷貝的問(wèn)題,在沒(méi)有深拷貝淺拷貝的情況下,如果沒(méi)有指定默認(rèn)的賦值運(yùn)算符重載函數(shù),那么系統(tǒng)將會(huì)自動(dòng)提供一個(gè)賦值運(yùn)算符重載函數(shù)。

下面是Vector的定義—— 包含成員字段、構(gòu)造函數(shù)和一個(gè)ToString()重寫(xiě)方法,以便查看Vector的內(nèi)容,***是C#運(yùn)算符重載:

  1. namespace Wrox.ProCSharp.OOCSharp  
  2. {  
  3. struct Vector  
  4. {  
  5. public double x, y, z;  
  6. public Vector(double x, double y, double z)  
  7. {  
  8. this.x = x;  
  9. this.y = y;  
  10. this.z = z;  
  11. }  
  12. public Vector(Vector rhs)  
  13. {  
  14. x = rhs.x;  
  15. y = rhs.y;  
  16. z = rhs.z;  
  17. }  
  18. public override string ToString()  
  19. {  
  20. return "( " + x + " , " + y + " , " + z + " )";   

這里提供了兩個(gè)構(gòu)造函數(shù),通過(guò)傳遞每個(gè)元素的值,或者提供另一個(gè)復(fù)制其值的Vector,來(lái)指定矢量的初始值。第二個(gè)構(gòu)造函數(shù)帶一個(gè)Vector參數(shù),通常稱(chēng)為復(fù)制構(gòu)造函數(shù),因?yàn)樗鼈冊(cè)试S通過(guò)復(fù)制另一個(gè)實(shí)例來(lái)初始化一個(gè)類(lèi)或結(jié)構(gòu)實(shí)例。注意,為了簡(jiǎn)單起見(jiàn),把字段設(shè)置為public。也可以把它們?cè)O(shè)置為private,編寫(xiě)相應(yīng)的屬性來(lái)訪問(wèn)它們,這樣做不會(huì)改變這個(gè)程序的功能,只是代碼會(huì)復(fù)雜一些。

下面是Vector結(jié)構(gòu)的有趣部分—— 為+運(yùn)算符提供支持的C#運(yùn)算符重載:

  1. public static Vector operator + (Vector lhs, Vector rhs)  
  2. {  
  3. Vector result = new Vector(lhs);  
  4. result.x += rhs.x;  
  5. result.y += rhs.y;  
  6. result.z += rhs.z;  
  7. return result;  
  8. }  
  9. }  

C#運(yùn)算符重載的聲明方式與方法的聲明方式相同,但operator關(guān)鍵字告訴編譯器,它實(shí)際上是一個(gè)運(yùn)算符重載,后面是相關(guān)運(yùn)算符的符號(hào),在本例中就是+。返回類(lèi)型是在使用這個(gè)運(yùn)算符時(shí)獲得的類(lèi)型。在本例中,把兩個(gè)矢量加起來(lái)會(huì)得到另一個(gè)矢量,所以返回類(lèi)型就是Vector。對(duì)于這個(gè)+運(yùn)算符重載,返回類(lèi)型與包含類(lèi)一樣,但這種情況并不是必需的。兩個(gè)參數(shù)就是要操作的對(duì)象。對(duì)于二元運(yùn)算符(帶兩個(gè)參數(shù)),如+和-運(yùn)算符,***個(gè)參數(shù)是放在運(yùn)算符左邊的值,第二個(gè)參數(shù)是放在運(yùn)算符右邊的值。

C#要求所有的C#運(yùn)算符重載都聲明為public和static,這表示它們與它們的類(lèi)或結(jié)構(gòu)相關(guān)聯(lián),而不是與實(shí)例相關(guān)聯(lián),所以運(yùn)算符重載的代碼體不能訪問(wèn)非靜態(tài)類(lèi)成員,也不能訪問(wèn)this標(biāo)識(shí)符;這是可以的,因?yàn)閰?shù)提供了運(yùn)算符執(zhí)行任務(wù)所需要知道的所有數(shù)據(jù)。

前面介紹了聲明運(yùn)算符+的語(yǔ)法,下面看看運(yùn)算符內(nèi)部的情況:

  1. {  
  2. Vector result = new Vector(lhs);  
  3. result.x += rhs.x;  
  4. result.y += rhs.y;  
  5. result.z += rhs.z;  
  6. return result;  

這部分代碼與聲明方法的代碼是完全相同的,顯然,它返回一個(gè)矢量,其中包含前面定義的lhs和rhs的和,即把x、y和z分別相加。

下面需要編寫(xiě)一些簡(jiǎn)單的代碼,測(cè)試Vector結(jié)構(gòu):

  1. static void Main()  
  2. {  
  3. Vector vect1, vect2, vect3;  
  4. vect1 = new Vector(3.0, 3.0, 1.0);  
  5. vect2 = new Vector(2.0,­­­–4.0,–4.0);  
  6. vect3 = vect1 + vect2;  
  7. Console.WriteLine("vect1 = " + vect1.ToString());  
  8. Console.WriteLine("vect2 = " + vect2.ToString());  
  9. Console.WriteLine("vect3 = " + vect3.ToString());  

把這些代碼保存為Vectors.cs,編譯并運(yùn)行它,結(jié)果如下:

  1. Vectors  
  2. vect1 = ( 3 , 3 , 1 )  
  3. vect2 = ( 2 ,–4 ,–4 )  
  4. vect3 = ( 5 ,–1 ,–3 ) 

C#運(yùn)算符重載不能用于Java。

C#運(yùn)算符重載的相關(guān)內(nèi)容就向你介紹到這里,希望對(duì)你了解C#運(yùn)算符重載有所幫助。

【編輯推薦】

  1. C#運(yùn)算符之算術(shù)運(yùn)算符淺析
  2. C#運(yùn)算符之??淺析
  3. C#運(yùn)算符種類(lèi)簡(jiǎn)析
  4. C#位運(yùn)算符種類(lèi)及使用淺析
  5. C#運(yùn)算符重載實(shí)例淺析
責(zé)任編輯:仲衡 來(lái)源: 百度空間
相關(guān)推薦

2009-08-12 10:47:03

C#運(yùn)算符重載

2009-09-04 13:18:10

C#允許運(yùn)算符重載

2009-08-12 10:27:12

C#運(yùn)算符重載運(yùn)算符重載實(shí)例

2009-08-14 10:16:57

C#運(yùn)算符重載

2009-08-12 10:56:47

C#運(yùn)算符重載C#運(yùn)算符重載實(shí)例

2009-08-12 12:46:11

C#運(yùn)算符重載

2009-11-06 13:57:52

C#

2009-08-19 17:33:35

C# 操作符

2009-08-11 15:51:08

C#運(yùn)算符算術(shù)運(yùn)算符

2009-08-12 11:20:51

C#運(yùn)算符重載

2009-08-12 09:30:10

C#??運(yùn)算符

2009-08-12 15:02:49

C#賦值運(yùn)算符簡(jiǎn)單賦值運(yùn)算符

2009-08-12 15:20:18

C#賦值運(yùn)算符復(fù)合賦值運(yùn)算符

2009-08-11 14:16:38

C# New運(yùn)算符

2009-09-01 10:08:57

C#運(yùn)算符

2009-08-12 13:35:22

C#關(guān)系運(yùn)算符

2009-08-12 14:29:32

C#條件運(yùn)算符

2009-08-12 14:49:33

C#移位運(yùn)算符

2021-12-15 10:25:57

C++運(yùn)算符重載

2011-07-15 01:34:36

C++重載運(yùn)算符
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)