6 過載操作符(operator)介紹

2021-10-24 05:33:12 字數 1709 閱讀 3850

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

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

對於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;

}};

int main()

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;

}

編譯並執行上述**,結果如下:

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

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

9 過載操作符

include includeusing namespace std class num void print 也可以在內部提供乙個 號操作符過載,但和全域性 號過載如果呼叫方法一致,就只能存在乙個 num operator num other 過載 是修改自身,不能返回新物件,所以要返回自身引用 ...

C C 過載操作符(二) 過載操作符

用於訪問一組元素中的乙個元素。預設的,陣列是支援下標訪問的。中的下標稱為 索引,key,唯一標誌符 當乙個物件設計用於包含多個元素時,可以過載操作符 比如乙個字串text包含多個元素 每個元素是乙個字串 text txt helloworld char ch text 0 比如在乙個datastor...

C 運算子過載 11 過載 和 操作符

運算子 用於流輸出,而運算子 用於流輸出。在開始過載這些操作符之前,必須注意下面的事項 1 cout是輸出類的物件,而cin是輸入類的物件 2 這些操作符必須過載為全域性函式。如果想要讓它們可以訪問私有成員,則必須定義為友元。為何必須過載為全域性函式?如果操作符過載為乙個成員函式,則它必須是物件的成...