struct
complex
//declare which operator to overload (+),
//the types that can be added (two complex objects),
//and the return type (complex):
public
static
complex
operator
+(complex c1, complex c2)
//override the tostring() method to display a complex number in the traditional format:
public
override
string
tostring()
+ i", real, imaginary));}}
class
testcomplex
", num1);
system.console.writeline(
"second complex number:
", num2);
system.console.writeline(
"the sum of the two numbers:
", sum);}}
可過載的運算子:
c# 允許使用者定義的型別通過使用 operator 關鍵字定義靜態成員函式來過載運算子。但不是所有的運算子都可被過載,下表列出了不能被過載的運算子:
運算子 可過載性
+、-、!、~、++、--、true 和 false
可以過載這些一元運算子。
——————————————————————————————
+, -, *, /, %, &, |, ^, <>
可以過載這些二進位制運算子。
——————————————————————————————
==, !=, , <=, >=
比較運算子可以過載(但請參見本表後面的說明)。
——————————————————————————————
&&, ||
條件邏輯運算子不能過載,但可使用能夠過載的 & 和 | 進行計算。
——————————————————————————————
不能過載陣列索引運算子,但可定義索引器。
——————————————————————————————
()
不能過載轉換運算子,但可定義新的轉換運算子(請參見 explicit 和 implicit)。
——————————————————————————————
+=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=
賦值運算子不能過載,但 += 可使用 + 計算,等等。
——————————————————————————————
=、.、?:、->、new、is、sizeof 和 typeof
不能過載這些運算子。
——————————————————————————————
注意比較運算子(如果過載)必須成對過載;也就是說,如果過載 ==,也必須過載 !=。反之亦然,< 和 > 以及 <= 和 >= 同樣如此。
若要在自定義類中過載運算子,您需要在該類中建立具有正確簽名的方法。該方法必須命名為「operator x」,其中 x 是正在過載的運算子的名稱或符號。一元運算子具有乙個引數,二元運算子具有兩個引數。在每種情況下,引數的型別必須與宣告該運算子的類或結構的型別相同,如下面的示例所示:
public static complex operator +(complex c1, complex c2)
C 運算子過載 過載特殊運算子
賦值運算子用於同類物件間的相互賦值。賦值運算子只能被過載為類的非靜態成員函式,不能過載為友元函式和普通函式。對於使用者自定義的類而言,如果沒有過載賦值運算子,那麼c 編譯器會為該類提供乙個預設的過載賦值運算子成員函式。預設賦值運算子的工作方式是按位對拷,將等到右邊物件的非靜態成員拷貝給等號左邊的物件...
C 運算子過載賦值運算子
自定義類的賦值運算子過載函式的作用與內建賦值運算子的作用類似,但是要要注意的是,它與拷貝建構函式與析構函式一樣,要注意深拷貝淺拷貝的問題,在沒有深拷貝淺拷貝的情況下,如果沒有指定預設的賦值運算子過載函式,那麼系統將會自動提供乙個賦值運算子過載函式。賦值運算子過載函式的定義與其它運算子過載函式的定義是...
C 運算子過載轉換運算子
為什麼需要轉換運算子?大家知道對於內建型別的資料我們可以通過強制轉換符的使用來轉換資料,例如 int 2.1f 自定義類也是型別,那麼自定義類的物件在很多情況下也需要支援此操作,c 提供了轉換運算子過載函式 它使得自定義類物件的強轉換成為可能。轉換運算子的生命方式比較特別,方法如下 operator...