C 學習摘要之七 運算子過載

2021-04-12 14:26:59 字數 1208 閱讀 8689

第七章 

運算子過載

c++語言中預定義的運算子的操作物件只能是基本資料型別,但是,在實際應用中,對於很多使用者自定義資料型別(如類)也需要類似的功能,這就需要對已有的運算子賦予多種含義,使同乙個運算子具有作用於不同類性的資料導致不同型別的行為,這就是運算子過載。因此,運算子過載的目的是設定c++語言中的某一運算子,讓它們之間並不衝突,c++語言會根據運算子的位置辨別應使用哪一種功能進行運算。可見,運算子過載的優點是允許改變使用於系統內部的運算子的操作方式,以適應使用者新定義型別的類似運算。

運算子過載的實質是函式過載。事實上,c++語言中的每乙個運算子對應著乙個運算子函式,在實現過程中,把指定的運算表示式中的運算子轉化為對運算子函式的呼叫,而表示式中的運算物件轉化為運算子函式的實參,這個過程是在編譯階段完成的。例如:

int a=1,b=2;

a+b;

表示式「a+b」在編譯前,將被解釋為函式呼叫形式:operator+(a,b)。

其中,operator是乙個關鍵字,它與後面的「+」共同組成了該運算子函式的函式名。

運算子過載是一種特殊的函式過載。在類中可以採用下述兩種方法對運算子函式進行過載。

將運算子函式過載為類的成員函式是指在類中定義乙個同名的運算子函式,其語句格式為:

type x::operator@(形參表)

其中,operator是關鍵字,@是需要被過載的運算子,x是需要過載該運算子的類名,type是該運算子函式的返回值型別。關鍵字operator與後面的運算子@共同組成了該運算子函式的函式名。

可以定義乙個與某一運算子函式同名的全域性函式,然後再將該全域性函式宣告為類的友元函式,從而實現運算子的過載。其語法格式為:

friend type operator@(形參表);

下面介紹運算子過載的幾個問題:

l以上兩種過載形式均可訪問類的私有成員;

l幾乎所有的運算子都可以被過載,但下列運算子不允許過載:

「.」、「.*」、「::」、「?:」

l運算子過載後,既不會改變原運算子的優先順序和結合特性也不會改變使用運算子的語法和引數個數;

l「=」、「()」、「」和「->」等運算子不能過載為友元函式;

l當運算子過載為類的成員函式時,函式的引數個數比原來的運算物件少乙個(右++和右--除外);當過載為類的友元函式時,引數個數與原運算子的運算個數相同;

單目運算子最好過載為類的成員函式,而雙目運算子則最好過載為類的友元函式。

C 學習摘要之七 運算子過載

第七章運算子過載 c 語言中預定義的運算子的操作物件只能是基本資料型別,但是,在實際應用中,對於很多使用者自定義資料型別 如類 也需要類似的功能,這就需要對已有的運算子賦予多種含義,使同乙個運算子具有作用於不同類性的資料導致不同型別的行為,這就是運算子過載。因此,運算子過載的目的是設定c 語言中的某...

c 學習筆記 七 運算子過載

c 允許過載運算子,使你自己定義的資料型別可以象基本資料型別那樣進行運算,方便.如果為complexnumber過載運算子 可以這樣定義 public static complexnumber opertor complexnumber a,complexnumber b 所有運算子過載均為類的靜態...

c 學習之運算子過載

今天這篇部落格 寫的是運算子的過載,這裡單純的寫了 號的運算子的過載,主要就是為了在以後需要的時候能夠找到對應的資料,還有就是通過作用域解析運算子來返回我們通過返回乙個物件 這裡有些運算子是不能載入的,有些運算子是只能通過成員函式來載入,以下截圖來自c primer plus 這段 寫的是乙個複數的...