我的c 學習 8 運算子過載和友元

2022-02-22 08:30:36 字數 1496 閱讀 1312

運算子的過載,實際是一種特殊的函式過載,必須定義乙個函式,並告訴c++編譯器,當遇到該運算子時就呼叫此函式來行使運算子功能。這個函式叫做

運算子過載函式

(常為類的成員函式)。

◆ 1、定義運算子過載函式的一般格式:

返回值型別 類名::operator過載的運算子(參數列)

operator是關鍵字,它與過載的運算子一起構成函式名。

例如定義複數相加:

complex complex::

operator+

(const complex &c)

◆ 2、【例4.8】定義了複數類,可完成複數基本運算,並應用它進行複數運算。

在本例中過載了運算子「+」、「=」、「+=」和「*」、「/」,以及求模(絕對值)的函式abs(),可以進行複數運算。

(1)在做 c=c2+c3時,c++編譯器把表示式c2+c3解釋為: c2.operator+(c3) ;

(2)可以用隱式的臨時物件替換顯式的物件temp,如例中過載的operator+(double),它執行複數與實數的加法。

complex complex::operator+(double d)

(3)complex complex::operator+(

const complex &c

)使用引用型別變數作為運算子過載函式的引數,可以提高複數型別運算的效率。

在引用形式引數型別說明前加const關鍵字,表示被引用的實參是不可改變的,如程式設計師不當心在函式體中重新賦值了被引用的實參,c++編譯器會認為出錯。例子中其它運算子也是類似處理。

(4)在預設的情況下,c++ 編譯器為每個類生成乙個預設的賦值『=』操作,用於同類的兩個物件之間的相互賦值,預設的語義是類成員逐個相互賦值。

對複數類 complex 如果沒有過載賦值運算子 =,複數的預設賦值語義是:

complex &complex::operator = (complex& c)

這種預設的賦值操作格式對所有類是固定的,這種預設的格式對複數是合適的,但對其他類預設的賦值可能產生問題,那時就需要過載『=』。

因為預設的賦值操作返回乙個複數的引用,所以它可以進行連續賦值如:a=b=c=d ;

(5)過載的運算子「+=」標準演算法是:

complex& complex::operator +=(complex & com)

◆ 1、運算子過載函式的函式名必須為關鍵字operator加乙個合法的運算子。在呼叫該函式時,將右運算元作為函式的實參。

◆ 2、當用類的成員函式實現運算子的過載時,運算子過載函式的引數(當為雙目運算子時)為乙個或(當為單目運算子時)沒有。運算子的左運算元一定是物件,因為過載的運算子是該物件的成員函式,而右運算元是該函式的引數,其型別並無嚴格限制。c++不允許過載三目運算子。

◆ 3、單目運算子「++」和「--」存在前置與後置問題。

後置「++」中的引數int僅用作區分,並無實際意義,可以給乙個變數名,也可以不給變數名。

◆ 4、c++中只有極少數的運算子不允許過載,表4.1中列出了不允許過載的運算子。

友元和運算子過載

友元分為友元函式和友元類兩種 1.友元函式。乙個類的友元函式可以訪問該類的私有成員 2.友元類。若a是b的友元類,則a的成員函式可以訪問b的私有成員 運算子過載 就是對已有的運算子 c 中預定義的運算子 賦予多重的含義,使同一運算子作用於不同型別的資料時導致不同型別的行為 目的 擴充套件c 中提供的...

友元運算子過載

運算子就是一種特殊的函式 運算子過載可以是普通函式 const money operator const money a1,const money a2 可以是成員函式 const money operator const money a2 const 當二元運算子作為成員函式進行過載時,只有乙個引...

c 筆記 運算子過載和友元

過載的作用機理 過載的區別 成員函式與非成員函式 友元運算子過載是一種形式的c 多型,過載的概念擴充套件到了運算子上,允許賦予c 運算子多種含義,允許將運算子過載擴充套件到使用者定義的型別。編譯器將根據運算元的數目和型別決定使用哪種加法定義。過載的運算子 有些例外情況 不必是成員函式,但必須至少有乙...