如你所見,c#運算子被定義為使用預定義型別作為運算元來工作。如果面對乙個使用者定義型別,運算子完全不知道如何處理它。運算子過載允許你定義c#運算子應該如何操作自定義型別的
運算元。
public
static
limitedint
operator-(
limitedint x)
// unary
public
static
limitedint
operator+(
limitedint x,
double y)
// binary
運算子過載的方法宣告需要:
例如,下面的**展示了類 limitedint 的兩個過載的運算子:加運算子和減運算子。你可以說它是負數而不是減法,因為運算子過載方法只有乙個單獨的引數,因此是一元的,而減法運算子是二元的。
class
limitedint return
public
static
limitedint
operator-(
limitedint x)..
.}
不是所有運算子都能被過載,可以過載的型別也有限制。
只有下面這些運算子可以被過載。列表中明顯缺少的是賦值運算子。
遞增和遞減運算子是可過載的。但和預定義的版本不同,過載運算子的前置和後置之間沒有區別。
運算子過載不能做下面的事情:
說明過載運算子應該符合運算子的直觀含義。
下面的**展示了類 limitedint 的3個運算子的過載:負數、減法和加法。
class
limitedint
public
static
limitedint
operator-(
limitedint x);}
public
static
limitedint
operator-(
limitedint x,
limitedint y);}
public
static
limitedint
operator+(
limitedint x,
limitedint y);}
public
override
string
tostring()
}class
program
;var li2 =
newlimitedint
; console.
writeline
($"li1: , li2: ");
var li3 =
-li1;
console.
writeline
($"- = ");
li3 = li1 - li2;
console.
writeline
($" - = ");
li3 = li1 + li2;
console.
writeline
($" + = ");
console.
readkey()
;}}
輸出結果:
li1: 10, li2: 26
-10 = 0
10 - 26 = 0
10 + 26 = 36
運算子過載之過載型別運算子
普通型別 類型別 呼叫對應的只有乙個引數 引數的型別就是這個普通型別 的建構函式 需求 boy boy1 10000 薪資 建構函式boy int boy boy2 rock 姓名 建構函式boy char 普通型別賦值給類型別其實很簡單,就是專門的對這個賦值的型別定義乙個建構函式。編譯器在執行 的...
運算子過載 賦值運算子的過載
有時候希望賦值運算子兩邊的型別可以不匹配,比如,把乙個int型別變數賦值給乙個complex物件,或把乙個 char 型別的字串賦值給乙個字串物件,此時就需要過載賦值運算子 注意 賦值運算子 只能過載為成員函式 賦值運算子過載例項示例 include include using namespace ...
運算子過載
c 中的運算子 1。大多數系統預定義運算子都能過載 不值得過載 不能被過載 2過載不能改變優先順序 不能改變結合性 不能改變運算子所需運算元的個數 過載後,可按這些運算子的表達方式使用 運算子過載的語法 一 通過運算子過載函式進行過載 1。運算子過載函式是成員函式 語法形式 type x opera...