過載操作符

2021-09-30 10:18:22 字數 1607 閱讀 4445

c++主題——過載操作符

1.       過載操作符後,操作符的含義不應該被改變。

2.       過載操作符後,優先順序和結合性不變。

3.       過載操作符,應注意如果原操作符是一目操作符,那麼過載後仍應該是一目的,以此類推,特別注意:衝在操作符時使用預設實參是非法的。

4.       短路操作符被過載後不再具備短路性。

5.       對於選擇友元、成員、非成員的形式,需要在過載前衡量習慣、效率等問題。

成員形式:

1)=、[ ]、()、->應定義為乙個成員形式

2)+=、-=等復合賦值操作符,通常定義成成員形式

3)對那些改變型別的資料成員的狀態的操作符,如++、--一般也定義為成員形式

非成員形式:

4)對稱操作符、如相等、關係、位操作符,定義為非成員函式。

5)io操作必須為非成員。

6)一般將算術操作符定義為非成員形式。

6.       過載operator + 和 operator +=時,若將其作為成員形式過載,那麼返回型別為t&型別、返回值為*this比較好,可以做連續加法,也可提高效率。

7.       預設情況下,對於類物件,複製操作符表示按位copy,取位址操作符返回物件的值,逗號操作符返回最右邊的運算元的值。

8.       邏輯判斷操作符在容器中應用比較廣,所以如果想將型別放在容器中,又進行類似sort等需要判斷邏輯大小關心的操作,應該過載大/小操作符。

9.       對於過載《操作符有比較一致的要求:

ostream& operator << (ostream& os, const classtype &object)

第乙個形參是對ostream物件的引用,在該物件上產生輸出。它不能使const因為寫入輸出流會改變流狀態。它必須是乙個引用,因為不能複製流。

返回值是ostream的引用,它的值通常是輸出操作符的ostream的物件。

10.   對於過載》操作符有比較一致的要求:

istream& operator>>(istream& in,const classtype& object)

需要注意的是,輸入操作符必須處理錯誤和檔案結束的可能性。

11.   算術操作符通常產生乙個新值,該值是兩個引數的計算結果,它不同於任意乙個引數。當我們定義了乙個符合運算子,又定義了乙個算術操作符,則可以通過符合操作符實現算術操作符。

12.   如果定義了相等操作符,那麼它應該同時定義不等操作符。同時,應讓乙個操作符完成比較物件的實際操作,而另乙個呼叫它。

stl中很多容器用到了相等操作符,所以當想把他放入容器中時,應該定義相等操作符。

13.   下標操作符必須為成員函式,而且為確保它在作用到賦值操作的左右兩邊時都表現正常,應該定義const和非const版本的下標操作符,他們都返回引用。

14.   箭頭操作符必須被定義為成員形式。它看起來像二元操作符,但是注意他是一元的,不接受實參。返回值必須是指向類型別的指標。這時會有遞迴呼叫箭頭操作符的情況,應避免。

15.   解引用可定義為成員形式。同時過載const和非const形式。

16.   自增自減操作符定義成成員形式,字首型無引數,字尾型有引數int。返回值為物件的引用。字首形式返回新值,字尾形式返回舊值。需顯示呼叫字尾形式。

操作符過載

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...

過載操作符

1.過載操作符1.1 限制過載操作符具有以下限制 1 只有c 預定義的操作符集中的操作符才可以被過載 2 對於內建型別的操作符,它的預定義不能被改變,應不能為內建型別過載操作符,如,不能改變int型的操作符 的含義 3 也不能為內建的資料型別定義其它的操作符 4 只能過載類型別或列舉型別的操作符 5...