運算子過載

2021-07-13 08:21:36 字數 2498 閱讀 1942

operator

operator 關鍵字用於在類或結構宣告中宣告運算子。運算子宣告可以採用下列四種形式之一:

public

static result-type operator unary-operator ( op-type operand )

public

static result-type operator binary-operator (

op-type operand,

op-type2 operand2

)

public

static

implicit

operator conv-type-out ( conv-type-in operand )

public

static

explicit

operator conv-type-out ( conv-type-in operand )

引數:result-type 運算子的結果型別。

unary-operator 下列運算子之一:+ - ! ~ ++ — true false

op-type 第乙個(或唯一乙個)引數的型別。

operand 第乙個(或唯一乙個)引數的名稱。

binary-operator 其中乙個:+ - * / % & | ^ << >> == != > < >= <=

op-type2 第二個引數的型別。

operand2 第二個引數的名稱。

conv-type-out 型別轉換運算子的目標型別。

conv-type-in 型別轉換運算子的輸入型別。

implicit

關鍵字用於宣告隱式的使用者定義型別轉換運算子。

如果可以確保轉換過程不會造成資料丟失,則可使用該關鍵字在使用者定義型別和其他型別之間進行隱式轉換。隱式轉換可以通過消除不必要的型別轉換來提高源**的可讀性。但是,因為隱式轉換不需要程式設計師將一種型別顯式強制轉換為另一種型別,所以使用隱式轉換時必須格外小心,以免出現意外結果。

explicit

關鍵字用於宣告必須使用強制轉換來呼叫的使用者定義的型別轉換運算子。

轉換運算子將源型別轉換為目標型別。

源型別提供轉換運算子。

與隱式轉換不同,必須通過強制轉換的方式來呼叫顯式轉換運算子。

如果轉換操作可能導致異常或丟失資訊,則應將其標記為explicit這可以防止編譯器無提示地呼叫可能產生無法預見後果的轉換操作。例如,在下面的示例中,此運算子將名為fahrenheit 的類轉換為名為celsius 的類:

public class fahrenheit

set

}public fahrenheit(float _degrees)

//也可以將以下運算子過載方法寫在celsius類中,但是只能編寫一次,否則將造成編譯錯誤。

public static explicit operator celsius(fahrenheit f)

public static explicit operator fahrenheit(celsius c)

}public class celsius

set

}public celsius(float _degrees)

//public static explicit operator celsius(fahrenheit f)

////public static explicit operator fahrenheit(celsius c)//}

public class digit

public double val;

// ...other members

// user-defined conversion from digit to double

public static implicit operator double(digit d)

// user-defined conversion from double to digit

public static implicit operator digit(double d)

}static void main()

dig2 = ", num, dig2.val);

//以下示例演示使用explicit關鍵字用於宣告必須使用強制轉換來呼叫的使用者定義的型別裝換運算子

fahrenheit f = new fahrenheit(100.0f);

celsius c = (celsius)f;

" celsius", c.degrees);

celsius cc = new celsius(37.7f);

fahrenheit ff = (fahrenheit)cc;//必須強制轉換

console.write(" fahrenheit", ff.degrees);

}

運算子過載之過載型別運算子

普通型別 類型別 呼叫對應的只有乙個引數 引數的型別就是這個普通型別 的建構函式 需求 boy boy1 10000 薪資 建構函式boy int boy boy2 rock 姓名 建構函式boy char 普通型別賦值給類型別其實很簡單,就是專門的對這個賦值的型別定義乙個建構函式。編譯器在執行 的...

運算子過載 賦值運算子的過載

有時候希望賦值運算子兩邊的型別可以不匹配,比如,把乙個int型別變數賦值給乙個complex物件,或把乙個 char 型別的字串賦值給乙個字串物件,此時就需要過載賦值運算子 注意 賦值運算子 只能過載為成員函式 賦值運算子過載例項示例 include include using namespace ...

運算子過載

c 中的運算子 1。大多數系統預定義運算子都能過載 不值得過載 不能被過載 2過載不能改變優先順序 不能改變結合性 不能改變運算子所需運算元的個數 過載後,可按這些運算子的表達方式使用 運算子過載的語法 一 通過運算子過載函式進行過載 1。運算子過載函式是成員函式 語法形式 type x opera...