C 高階程式設計筆記2023年10月12日 運算子過載

2022-01-11 07:27:27 字數 1719 閱讀 7789

1、運算子過載:運算子重重載的關鍵是在物件上不能總是只呼叫方法或屬性,有時還需要做一些其他工作,例如,對數值進行相加、相乘或邏輯操作等。例如,語句if(a==b)。對於類,這個語句在預設狀態下會比較引用 a 和 b 。檢測這兩個引用是否指向記憶體中的同乙個位址,而不是檢測兩個例項是否包含相同的資料。然而對於 string 類,這種操作就會重寫,於是比較字串實際上就是比較每個字串的內容。可以對自己的類進行這樣的操作。 對於結構,「==」 運算子在預設狀態下是不做任何工作。試圖比較兩個結構,看看它們是否相等,就會產生乙個編譯錯誤。除非顯示地過載了「==」,告訴編譯器如何進行比較。

運算子的工作方式

完整**如下:

比較運算子的過載

c#中共有6個比較運算子 它們分為3對

c#要求成對過載比較運算子,即,如果過載了「==」,也就必須過載「!=」;否則會產生編譯錯誤。另外,比較運算子必須返回布林型別的值。這是它們與算術運算子的根本區別,

在過載 「==」 和「!=」 時,還必須過載從 system.object 中繼承的 equals() 和gethashcode() 方法,否則會產生乙個編譯警告。原因是equals()方法應實現與「==」運算子相同型別的相等邏輯。

除了這些區別外,過載比較運算子所遵循的規則與過載算術運算子相同。但比較兩個數並不像想象的那麼簡單,例如,如果只比較兩個物件引用,就是比較儲存物件的記憶體位址。比較運算子很少進行這樣的比較,所以必須編寫**過載運算子,比較物件的值,並返回相應的布林結果。

可以過載的運算子:

類別運算子

限制 算術二元運算子

+ 、*、  /、 -、 %

無  算術一元運算子

+、 -、 ++、 --

無按位二元運算子

&、|、^、<<、>>

無按位一元運算子

!、~、true、false

true 和 false 必須成對過載

比較運算子

==、!=、>=、<=、<、>

必須成對過載

賦值運算子

+= 、-=、 *=、 /=、 >>=、 <<=、 %=、 |=、 ^=

不能顯式地過載這些運算子,在重寫單個運算子(如+,-,%等)時,它們會被隱式地重寫。

索引運算子

不能直接過載索引運算子。索引器成員型別允許在類和結構上支援索引運算子

資料型別強制轉換運算子

()不能直接過載型別強制轉換運算子。使用者定義的型別強制轉換允許定義定製的型別強制轉換行為

2、使用者定義的型別強制轉換

定義型別強制轉換的語法類似於過載運算子,型別強制轉換在某種情況下可以看做是一種運算子默,其作用是從源型別轉換為目標型別。

public

static

implicit

operator

float

(currency value)//implicit 隱式 explicit 顯式

運算子的返回型別定義了型別強制轉換操作的目標型別,它有乙個引數,即要轉換的源物件。這裡定義的型別強制轉換可以隱式地把currency 型的值轉換為float 型。 注意,如果資料型別轉換宣告為隱式,編譯器就可以隱式或顯式地使用這個轉換。如果資料型別轉換宣告為顯式,編譯器就只能顯式地使用它。與其他運算子過載一樣,型別強制轉換必須同時宣告為public 和static。

3、裝箱和拆箱資料型別強制轉換

C 筆記2023年10月19日

楊輝三角 using system using system.collections.generic using system.linq using system.text namespace sj101901 列印數字 for int j 0 j i j else 需要計算空格的個數,防止大面積重...

2023年10月總結

一 工作 乙個月的時間裡,西寧佔90 昆明10 本月情況 西寧 整個月的重心都在西寧上,乙個星期改一次研發計畫,並且經常不按時間節點發版,測試沒辦法按照計畫來執行,真的是好累 覺得自己應該多去協助研發,但是估計是自己能力有限,所以基本只能丟擲問題,只能在需求有疑問的時候給出解決方案,然後就是測試出問...

2019 年10月10日C程式設計 1 3章

第一章 c語言主要特點 資料型別豐富 包括 整型,浮點型 字元型,陣列型別,指標型別,結構體型別,共用體型別 擴充 複數浮點型別,超長整型,布林型別 結構化控制語句 if else 語句 while語句 do while語句,switch語句,for語句 c語言允許用兩種注釋方式 單行注釋 塊式注釋...