c#中過載運算子的語法和其它語言差不多,比起c++來,它多乙個限制,過載運算子的這個方法必須是public static的下面以過載+為例:
usingsystem;
using
system.collections.generic;
using
system.text;
namespace
運算子過載
//把成員變數定義成公有的只是為了進行演示的方便。
public
inta;
public
intb;
//兩個物件相加
public
static fushu operator +(fushu fs1, fushu fs2)
//乙個物件與一相數字相加
public
static fushu operator +(fushu ft, int
num)
}class
program
}}
可以看出,過載後的「+「使用起來和普通的"+」沒有什麼區別,而實際上,系統自動完成了相應的運算子的過載函式的呼叫過程。具體編譯器是怎樣解釋的還沒有去深究。
下面來具體分析上面的這兩個過載。
第乙個:public static fushu operator +(fushu fs1, fushu fs2),這個很多好理解,就是讓兩個物件的成員相加,然後返回這個物件。
第二個:public static fushu operator +(fushu ft, int num),初一看也差不多。沒什麼特別的,就是讓乙個物件和乙個數字相加。實際上,如果是在c++中,這個過載可以只傳乙個引數num就可以了,在主方法中呼叫的時候,直接讓乙個物件與乙個數字相加。而c#中不可以,如果寫成: public static fushu operator +(fushu ft)會報錯::「此一元運算子的引數型別必須是包含型別」。也就是說在進行運算子過載的時候,必須有乙個引數是這個類或者結構本身的型別。所以我們可以猜想,如果我們過載的是乙個一元運算子,而不是乙個二元運算子,那麼,也要傳乙個類或者結構本身的資料型別來。要不然也會報同樣的錯誤。
C 運算子過載 以時間類為例
計算時間,記錄運算子過載例子,宣告定義分離 注 template class一般不建議將宣告和定義分離,否則要include實現檔案才能正常使用 非靜態成員函式後面加const關鍵字,用來限定 this 指標為const,唯一例外是被mutable修飾的成員變數 後續再提 mytime.h prag...
C 運算子過載(複數類為例)
運算子過載 複數為例 兩種過載形式 過載為類的非靜態函式 加法 過載為非成員函式 減法 實現 運算子的過載 date mar,27 include include using namespace std class complex 複數類 complex operator const complex...
C 中運算子過載
運算子過載使得使用者自定義的資料以一種更簡潔的方式工作。比如int x,y 可以為y x y 而 my c1,c2 如果想使得兩個自定義的物件相加,以前只能調 用函式計算它們的和。而現在只要定義了運算子過載就能實現c1 c1 c2.所謂過載,就是重新賦予新的含義。函式過載就是對乙個已有的函式賦予新的...