C 過載操作符的那點事

2022-01-13 12:41:48 字數 2479 閱讀 1948

如時實現c#操作符過載。

c#操作符過載方法:

1、編寫操作符過載方法。

2、例項化後,進行操作符運算

下邊用c#操作符過載**進行說明:

internal

struct hour

//定義個屬性用於取value的值。

public

int ivalue

set }//

宣告乙個二元操作符,將兩個hour相加

public

static hour operator +(hour ihs, hour rhs)

/*操作符是public的。所有操作符都必須是public的

操作符是static的。所有操作符都必須是static的,操作永遠不具有多型性,

面且不能使用virtual、abstract、override或者sealed修飾符。

二元操作符(比如+)有兩個顯式引數;一元操作符有乙個顯式的引數

我們有了public hour(int ivalue)建構函式,就可以將乙個int與hour相加,

只是首先要將int轉換成為hour hour a= ; int b= ; hour sum=a+new hour(b);

雖然上述**完全有效,但相較於讓乙個hour和乙個int直接相加它即不清晰也不準確。

為了使hour可以+ int,必須宣告乙個二元操作符+,它的第乙個引數是hour,第二個引數是乙個int。

c#操作符過載

*/public

static hour operator +(int ihs, hour rhs)

public

static hour operator +( hour rhs,int ihs)

/*c#中,下列操作符都是可以過載的:

+ - ! ~ ++ -- true false

* / % & | ^ << >> == != > < >= <=

但也有一些操作符是不允許進行過載的,如:

=,&&,||,?:,new,typeof,sizeof,is

一元操作符過載

顧名思義,一元操作符過載時操作符只作用於乙個物件,此時參數列為空,當前物件作為操作符的單運算元。

*/public

static hour operator ++(hour huvalue)

//c#操作符過載

//==操作符是二元操作符,必須帶有兩個引數

public

static

bool

operator==(hour lhs,hour rhs)

/*二元操作符過載

大多數情況下我們使用二元操作符過載。這時參數列中有乙個引數,

當前物件作為該操作符的左運算元,引數作為操作符的右運算元。

下面我們給出二元操作符過載的乙個簡單例子,即笛卡兒座標相加。

*/public

static

bool

operator !=(hour lhs, hour rhs) }

class program

//這個方法被jit編譯時,beforefieldinit和precise類的型別構造器還沒被執行,所以對這些構造器的呼叫將嵌入這個方法的**中,使它的執行變得較慢。

private

static

void perftest1(int iterations)

console.writeline("

perftest1: beforefileldinit

", sw.elapsed);

sw = stopwatch.startnew();

for (int x = 0; x < iterations; x++)

console.writeline("

perftest1: precise

", sw.elapsed);}//

這個方法被jit編譯時,beforefieldinit和precise類的型別構造器已經被執行,所以這個方法的**中,不會在生成對這些構造器的呼叫,它執行的更快。

private

static

void perftest2(int iterations)

console.writeline("

perftest2: beforefileldinit

", sw.elapsed);

sw = stopwatch.startnew();

for (int x = 0; x < iterations; x++)

console.writeline("

perftest2: precise

", sw.elapsed);

}}

c#程式語言要求操作符過載方法有乙個引數的型別與當前定乙個這個方法的型別相同。這樣的限制是為了使c#編譯器在合理的時間內找到要繫結的操作符方法。

C 操作符過載

1.作為成員過載 class myclass public myclass operator const myclass d cons friend myclass operator const myclass a1,const myclass a2 關於返回值型別的討論 呼叫者堆疊裡返回乙個物件效...

C 過載操作符

過載操作符 一 過載操作符的定義 1.過載操作符的結構 返回型別 operator 需要過載的操作符 形參列表 注意 形引數目應和運算元數目相同。2.過載操作符的幾條注意事項 1 過載的操作符名不能通過連線其他合法符號來建立任何新的操作符。如 2 過載操作符必須具備至少乙個類型別或列舉型別的運算元。...

c 操作符過載

過載操作符 一 限制 1 不能增加新的操作符 2 有些操作符不能過載,如.物件中的訪問成員 作用域解析操作符 sizeof 三元操作符 3 不能改變操作符的元數,元數是指與操作符相關的引數或運算元個數。比如一元操作符 只能應用於乙個操作符 4 不能改變操作符的優先順序 5 不能重新定義內建型別的操作...