本文主要介紹c++中的過載操作符(operator)的相關知識。
operator 是c++的乙個關鍵字,它和運算子(如=)一起使用,表示乙個運算子過載函式,在理解時可將operator和運算子(如operator=)視為乙個函式名。
使用operator過載運算子,是c++擴充套件運算子功能的方法。使用operator擴充套件運算子功能的原因如下:
對於c++提供的所有操作符,通常只支援對於基本資料型別和標準庫中提供的類的操作,而對於使用者自己定義的類,如果想要通過該操作符實現一些基本操作(比如比較大小,判斷是否相等),就需要使用者自己來定義關於這個操作符的具體實現了。
比如,我們要設計乙個名為「person」的類,現在要判斷person類的兩個物件p1和p2是否一樣大,我們設計的比較規則是按照其年齡來比較,那麼,在設計person類的時候,就可以通過對操作符「==」進行過載,來使用操作符「==」對物件p1和p2進行比較了(根據前面的分析,實際上比較的內容應該是person類中的資料成員「age」)。
我們上面說的對操作符「==」進行過載,說是「過載」,是由於編譯器在實現操作符「==」功能的時候,已經為我們提供了這個操作符對於一些基本資料型別的操作支援,只不過由於現在該操作符所操作的內容變成了我們自定義的資料型別(如class),而預設情況下,該操作符是不能對我們自定義的class型別進行操作的,所以,就需要我們通過過載該操作符,給出該操作符操作我們自定義的class型別的方法,從而達到使用該操作符對我們自定義的class型別進行運算的目的。
實現乙個操作符過載的方式通常分為兩種情況:
在類體中宣告(定義)需要過載的操作符,宣告方式跟普通的成員函式一樣,只不過操作符過載函式的名字是「關鍵字 operator +以及緊跟其後的乙個c++預定義的操作符」,樣式如下(person是我們定義的類):
示例**(operator_test2.cpp)如下:bool
operator==(
const person& ps)
return
false;
}
編譯並執行上述**,結果如下:#include
using
namespace
std;
class
person
bool
operator==(
const person& ps)
return
false;}};
intmain
()
else
return
0;
}
通過上述結果能夠知道:因為操作符過載函式「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
return
0;
}
可以根據以下因素,確定把乙個操作符過載為類的成員函式還是全域性函式:
實現操作符過載時,需要注意:
本文主要介紹c++中的過載操作符(operator)的相關知識。
複習 C 之過載操作符operator
過載操作符就是為了實現類的多型性,讓運算子與類結合,產生新的含義。使用類的成員函式或友元函式 類外的普通函式 實現。過載 includeusing namespace std 過載操作符一定要有乙個物件參與 class cnum int operator int num 過載 int operato...
C 技巧之operator操作符
cpp view plain copy template typename t class a private t m 又比如stl中的函式物件,過載 這是c 中較推薦的寫法,功能與函式指標類似,如下所示 c sharp view plain copy template struct a 2 ope...
C 技巧之operator操作符
cpp view plain copy template typename t class a private t m 又比如stl中的函式物件,過載 這是c 中較推薦的寫法,功能與函式指標類似,如下所示 c sharp view plain copy template struct a 2 ope...