C 中操作符函式及運算子的過載

2022-08-22 05:21:11 字數 2122 閱讀 1916

一、操作符函式

在c++中,編譯器有能力把乙個由資料、物件和操作符共同組成的表示式,解釋為對乙個全域性或成員函式的呼叫。

這種全域性或成員函式就被稱為操作符函式,通過重定義操作符函式,可以實現針對對自定義型別的運算法則,並使之與內建型別一樣去參與各種的表示式。

二、雙目操作符表示式

成員函式

形如l#r雙目操作符表示式,將被編譯器解釋為 l.operator#(r)

a-b+c == a.operator-(b).operator+(c)

全域性函式

形如l#r的雙目操作符表示式,將被編譯器解釋為 ::operator#(l,r)

a-(b+c) == ::operator-(a,::operator+(b,c))

三、單目操作符表示式

成員函式

形如#o或o#的單目操作表示式,將被編譯器解釋為 o.operator#(),唯一的運算元是呼叫物件。

全域性函式

形如#o或o#的單目操作表示式,將被編譯器解釋為 ::operator#(o),唯一的運算元是呼叫物件。

四、典型的雙目運算子過載

成員函式

point operator /+-*%|^& (point&that)

注意點:這裡的原物件的值不變,需要產生乙個臨時的物件。

bool

operator > < >= <= == != || && (point&that)

point& operator += -= *= /= (point&that)

這也是2大類雙目運算子過載形式。注意點是:運算子的過載是要符合情理的。

全域性函式

可能會訪問到引數的私有成員:

1、把成員變成公開,但會破壞類的封閉性。

2、把全域性函式宣告為友元(友元不是成員),

3、不能在友元函式中直接訪問成員變數。

point operator + (point& a,point&b)

五、典型的單目運算子過載

成員函式:

前++/--point& operator ++/-- (void) 

後++/--point

operator ++/-- (int

)

全域性函式:

前++/--point& operator ++/-- (point&)

後++/--point

operator ++/-- (point&,int

)

六、輸入、輸出運算子過載

輸入、輸出運算子不能過載為成員函式。。

ostream& operator

<< (ostream& os,point&p)

istream& operator >> (istream& is,point&p)

friend ostream& operator << (ostream& os,point& p);

friend istream& operator >> (istream& is,point& p);

輸入、輸出運算子是需要友元函式宣告的。

七、特殊的運算子的過載

下標運算子,可以把物件當作陣列來使用。

() 函式運算子,可以把物件當作函式來使用。

-> 成員訪問運算子,可以把物件當作指標來使用。

* 解引用運算子,可以把物件當作指標來使用。

new/delete 也可以進行過載,但不建議使用。

new會自動呼叫過載的new函式再建構函式。

delete會先呼叫析構再呼叫過載的delete函式。

八、運算子過載的一些限制

1、不能過載的運算子

:: 作用域限定符

. 成員訪問運算

.* 成員指標解引用

?: 三目運算子

sizeof 位元組長度運算子

typeid 型別資訊操作符

2、運算子的過載改變不了運算子的優先順序

3、無法改變運算子的操作個數

4、無法發明新的運算子

5、過載運算子要注意運算子的一致性

不要改變運算子預設的運算規則

C 運算子 (關係操作符)

現在,讀者已經學會了如何表示資料,接下來我們學習如何處理資料。c語言為處理資料提供了大量的操作,可以在程式中進行算術運算 比較值的大小 修改變數 邏輯的組合等。關係操作符 這類操作符用於測試運算元之間的各種關係。c提供了所有常見的關係操作符。這些操作符是 這些操作符產生的結果都是乙個整型值,而不是布...

C 運算子過載 11 過載 和 操作符

運算子 用於流輸出,而運算子 用於流輸出。在開始過載這些操作符之前,必須注意下面的事項 1 cout是輸出類的物件,而cin是輸入類的物件 2 這些操作符必須過載為全域性函式。如果想要讓它們可以訪問私有成員,則必須定義為友元。為何必須過載為全域性函式?如果操作符過載為乙個成員函式,則它必須是物件的成...

C 運算子過載函式之成員運算子過載函式

5.2.3 成員運算子過載函式 在c 中可以把運算子過載函式定義為某個類的成員函式,稱之為成員運算子過載函式。1.定義成員運算子過載函式的語法形式 1 在類的內部,定義成員運算子過載函式的格式如下 函式型別 operator 運算子 形參表 2 成員運算子過載函式也可以在類中宣告成員函式的原型,在類...