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。返回值為物件的引用。字首形式返回新值,字尾形式返回舊值。需顯示呼叫字尾形式。
C 操作符過載
1.作為成員過載 class myclass public myclass operator const myclass d cons friend myclass operator const myclass a1,const myclass a2 關於返回值型別的討論 呼叫者堆疊裡返回乙個物件效...
C 過載操作符
過載操作符 一 過載操作符的定義 1.過載操作符的結構 返回型別 operator 需要過載的操作符 形參列表 注意 形引數目應和運算元數目相同。2.過載操作符的幾條注意事項 1 過載的操作符名不能通過連線其他合法符號來建立任何新的操作符。如 2 過載操作符必須具備至少乙個類型別或列舉型別的運算元。...
c 操作符過載
過載操作符 一 限制 1 不能增加新的操作符 2 有些操作符不能過載,如.物件中的訪問成員 作用域解析操作符 sizeof 三元操作符 3 不能改變操作符的元數,元數是指與操作符相關的引數或運算元個數。比如一元操作符 只能應用於乙個操作符 4 不能改變操作符的優先順序 5 不能重新定義內建型別的操作...