運算子過載關鍵字operator

2022-02-09 06:43:56 字數 2009 閱讀 6216

operator關鍵字用來過載內建運算子,使用方法如下:

public

class

operatorcontroller : controller

//overload operator +

public

static operatorcontroller operator +(operatorcontroller a, operatorcontroller b)

//overload operator *

public

static operatorcontroller operator *(operatorcontroller a, operatorcontroller b)

}

上面的operatorcontroller類提供了乙個建構函式和"+","*"的過載方法。

下面是一組執行**:

var a = new operatorcontroller(1, 2

);var b = new operatorcontroller(3, 7

);var c = new operatorcontroller(2, 3

);var d = a +b;

var e = a * b + c;

為了便於理解,我將執行過程中的變數一一輸出:

a

response.write("

a:" + a.num + "

--" + a.den + "

");

輸出:a:1--2

b

response.write("

b:" + b.num + "

--" + b.den + "

");

輸出:b:3--7

c

response.write("

c:" + c.num + "

--" + c.den + "

");

輸出:b:2--3

d

response.write("

d:" + d.num + "

--" + d.den + "

");

輸出:d:13--14

e

response.write("e

:" + e.num + "

--" + e.den + "

");

輸出:e:37--42

接下來,重點說一下過載"+"是如何實現的:

以var d = a + b;為例, 分解一下執行過程,

step1. 執行"+"過載方法

public

static operatorcontroller operator +(operatorcontroller a, operatorcontroller b)

當a和b做"+"運算時,會把a和b作為引數傳入到這個過載方法(過載運算子只支援兩個引數),通過運算可以演變成

public

static operatorcontroller operator +(operatorcontroller a, operatorcontroller b)

step2. 執行建構函式

public operatorcontroller(int num, int

den)

所以執行response.write("d:" + d.num + "--" + d.den + "

");時,會輸出d:13--14

在下面過載"=="的方法裡,沒有自己的業務邏輯,跟equals(x,y)效果一樣

public

static

bool

operator ==(baseentity x, baseentity y)

C 運算子過載和 implicit關鍵字

運算子過載是指允許使用者使用使用者定義的型別編寫表示式的能力。它允許使用者定義的型別與預定義的型別具有相同的功能。implicit關鍵字用於宣告隱式的使用者定義型別轉換運算子。如果轉換過程可以確保不會造成資料丟失,則可使用該關鍵字在使用者定義型別和其他型別之間進行隱式轉換。public class ...

asp關鍵字函式運算子

作者blog http blog.csdn.dzh2004 選單標記 選項選單 目錄選單 選單格式 一 選單格式 二 說明式選單 標題選單 直線與 標記 標題 超連結標記 錨 圖形標記 框架標記 定義框架內容 不支援框架宣告 表單標記 script vbscript標記索引 基本運算 數字加法及字串...

c關鍵字控制語句運算子小結

摘自 你必須知道的n個c語言問題 人郵的,不知道為什麼原版錯誤很多。就摘了一些要點吧。一 重點 位,位元組,位址的運算 二 32個關鍵字 注意不要跟巨集定義 null,eof 弄混了 int,float,double,char,struct,union,enum,void,typedef long,...