運算子過載

2021-09-27 03:34:42 字數 1807 閱讀 6483

​ 如你所見,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...