C 運算子過載(一) 必要性及過載原則

2021-05-28 14:46:23 字數 1101 閱讀 7056

原文:

(一) c++中預定義的運算子其運算物件只能是基本資料型別,而不適用於使用者自定義型別(如類)

(二)c++不允許使用者自己定義新的運算子,只能對已有的c++運算子進行過載

(三) c++允許過載的運算子c++中絕大部分的運算子允許過載

不能過載的運算子只有5個: 

(1) 成員訪問運算子.

(2) 作用域運算子∷

(3) 條件運算子?:

(4) 成員指標運算子*

(5) 編譯預處理命令的開始符號#

(四) 過載不能改變運算子運算物件(即運算元)的個數

(五) 過載不能改變運算子的優先級別

(六) 過載運算子的函式不能有預設的引數,否則就改變了運算子引數的個數,與前面第(3)點矛盾

(七) 過載的運算子必須和使用者定義的自定義型別的物件一起使用,其引數至少應有乙個是類物件(或類物件的引用)。也就是說,引數不能全部是c++的標準型別,以防止使用者修改用於標準型別資料的運算子的性質。

(八) 用於類物件的運算子一般必須過載,但有兩個例外,運算子「=」和「&」不必使用者過載。

① 賦值運算子(=)可以用於每乙個類物件,可以利用它在同類物件之間相互賦值。

② 位址運算子&也不必過載,它能返回類物件在記憶體中的起始位址。

總之,當c++語言原有的乙個運算子被過載之後,它原先所具有的語義並沒有消失,只相當於針對乙個特定的類定義了乙個新的運算子。

(1)只能使用成員函式過載的運算子有:=、()、、->、new、delete。

(2)單目運算子最好過載為成員函式。

(3) 對於復合的賦值運算子如+=、-=、*=、/=、&=、!=、~=、%=、>>=、<<=建議過載為成員函式。

(4) 對於其它運算子,建議過載為友元函式。

運算子過載的方法是定義乙個過載運算子的函式,在需要執行被過載的運算子時,系統就自動呼叫該函式,以實現相應的運算。也就是說,運算子過載是通過定義函式實現的。運算子過載實質上是函式的過載。過載運算子的函式一般格式如下:

函式型別 operator 運算子名稱 (形參表列)

過載為類成員函式時引數個數=原運算元個數-1(後置++、--除外)

過載為友元函式時 引數個數=原運算元個數,且至少應該有乙個自定義型別的形參

C 運算子過載 過載特殊運算子

賦值運算子用於同類物件間的相互賦值。賦值運算子只能被過載為類的非靜態成員函式,不能過載為友元函式和普通函式。對於使用者自定義的類而言,如果沒有過載賦值運算子,那麼c 編譯器會為該類提供乙個預設的過載賦值運算子成員函式。預設賦值運算子的工作方式是按位對拷,將等到右邊物件的非靜態成員拷貝給等號左邊的物件...

C 運算子過載

一般說來,單目運算子最好被過載為成員 對雙目運算子最好被過載為友元函式,雙目運算子過載為友元函式比重載為成員函式更方便.運算子過載實際是乙個函式,所以運算子的過載實際上是函式的過載。編譯程式對運算子過載的選擇,遵循著函式過載的選擇原則。當遇到不很明顯的運算時,編譯程式將去尋找引數相匹配的運算子函式。...

C 運算子過載

所謂多型性是指發出同樣的訊息被不同型別的物件接收時導致完全不同的行為。這裡所說的訊息主要是指對類的成員函式的呼叫,而不同的行為是指不同的實現。利用多型性,使用者只需傳送一般形式的訊息,而將所有的實現留給接收訊息的物件。物件根據所接收到的訊息而做出相應的動作 即操作 函式過載和運算子過載是簡單一類多型...