C operator(過載操作符)

2021-09-26 03:14:06 字數 2354 閱讀 6379

operator 是c++的乙個關鍵字,它和運算子(如=)一起使用,表示乙個運算子過載函式,在理解時可將operator和運算子(如operator=)視為乙個函式名。

使用operator過載運算子,是c++擴充套件運算子功能的方法。使用operator擴充套件運算子功能的原因如下:

使過載後的運算子的使用方法與過載前一致

擴充套件運算子的功能只能通過函式的方式實現(實際上,c++中各種「功能」都是由函式實現的)

對於c++提供的所有操作符,通常只支援對於基本資料型別和標準庫中提供的類的操作,而對於使用者自己定義的類,如果想要通過該操作符實現一些基本操作(比如比較大小,判斷是否相等),就需要使用者自己來定義關於這個操作符的具體實現了。

比如,我們要設計乙個名為「person」的類,現在要判斷person類的兩個物件p1和p2是否一樣大,我們設計的比較規則是按照其年齡來比較,那麼,在設計person類的時候,就可以通過對操作符「== 」進行過載,來使用操作符「==」對物件p1和p2進行比較了(根據前面的分析,實際上比較的內容應該是person類中的資料成員「age」)。

我們上面說的對操作符 「 == 」 進行過載,說是「過載」,是由於編譯器在實現操作符「==」功能的時候,已經為我們提供了這個操作符對於一些基本資料型別的操作支援,只不過由於現在該操作符所操作的內容變成了我們自定義的資料型別(如class),而預設情況下,該操作符是不能對我們自定義的class型別進行操作的,所以,就需要我們通過過載該操作符,給出該操作符操作我們自定義的class型別的方法,從而達到使用該操作符對我們自定義的class型別進行運算的目的。

實現乙個操作符過載的方式通常分為兩種情況:

在類體中宣告(定義)需要過載的操作符,宣告方式跟普通的成員函式一樣,只不過操作符過載函式的名字是「關鍵字 operator +以及緊跟其後的乙個c++預定義的操作符」,樣式如下(person是我們定義的類):

bool

operator==(

const person& ps)

return

false

;}

示例**(operator_test2.cpp)如下:

#include

using

namespace std;

class

person

bool

operator==(

const person& ps)

return

false;}

};intmain()

else

return0;

}

因為操作符過載函式「operator==」是person類的乙個成員函式,所以物件p1、p2都可以呼叫該函式。其中的 if (p1 == p2) 語句,相當於物件p1呼叫函式「operator==」,把物件p2作為乙個引數傳遞給該函式,從而實現了兩個物件的比較。

對於全域性過載操作符,代表左運算元的引數必須被顯式指定。

示例**如下:

#include

using

namespace std;

class

person

;// 左運算元的型別必須被顯式指定

// 此處指定的型別為person類

bool

operator

==(person const

& p1 ,person const

& p2)

else

}int

main()

else

return0;

}

可以根據以下因素,確定把乙個操作符過載為類的成員函式還是全域性函式:

實現操作符過載時,需要注意:

過載()操作符的類,它的物件叫做函式物件,即它是 類似於函式的 物件(它可以向函式一樣呼叫),也叫作仿函式。

注意:函式物件(仿函式)是乙個類,不是乙個函式。

與普通函式相比,函式物件比函式更加靈活,函式物件的優勢:

函式物件可以有自己的狀態。我們可以在類中定義狀態變數,這樣乙個函式物件在多次的呼叫中可以共享這個狀態;

函式物件有自己特有的型別。我們可以傳遞相應的型別作為引數來例項化相應的模板,比如說帶引數的函式形參

過載操作符()有乙個引數,稱為一元仿函式,有兩個引數,就叫二元仿函式。

#include

using

namespace std;

struct print

void

operator()

(int val)};

intmain()

C operator關鍵字(過載操作符)

operator是c 的關鍵字,它和運算子一起使用,表示乙個運算子函式,理解時應將operator 整體上視為乙個函式名。這是c 擴充套件運算子功能的方法,雖然樣子古怪,但也可以理解 一方面要使運算子的使用方法與其原來一致,另一方面擴充套件其功能只能通過函式的方式 c 中,功能 都是由函式實現的 1...

操作符過載

ifndef vertex h define vertex h class vertex vertex float px float py float pz vertex operator const vertex p vertex operator const vertex p void oper...

操作符過載

1.操作符是靜態方法,返回值表示操作結果,引數是運算元。2.操作符過載需要在過載的操作符前加上operator關鍵字。3.最好少用操作符過載,只有在意義明晰而且與內建類的操作一致時才適合使用,以免造成混亂。以建立的分數類 fraction 中的 為例,該分數類中有兩個int型的私有屬性 分子 num...