一.什麼是操作符的過載?
操作符的過載就是就是把已經定義的、有一定功能的操作符進行重新定義,來完成更為細緻具體的運算等功能。
二.為什麼要進行操作符的過載?
當你自定義了乙個類,想要把兩個類物件相加,而傳統的』+』無法對類物件進行運算,這時候就需要進行運算子的過載了。
三.過載的過程中需要注意什麼?
1.並不是所有操作符都可以被過載(例如:: . .* ?:)還有sizeof也不可以被過載
2.操作符過載函式中必須有乙個類型別或者自定義型別變數
3.除了』=』外,所有過載操作符都可以被派生類繼承
4.不在具備短求職特性
過載操作符不能保證操作符的求職順序,在過載&&和||中,對每個運算元
都要進行求值,而且對運算元的求職順序不能做規定,因此:過載&&、||和逗號操作符不是好的做法。
5.一般將算術操作符定義為非成員函式,將賦值運算子定義成員函式
6、操作符定義為非類的成員函式時,一般將其定義為類的友元
7、== 和 != 操作符一般要成對過載
8、下標操作符:乙個非const成員並返回引用,乙個是const成員並返回引用
9、解引用操作符*和->操作符,不顯示任何引數
10、自增自減操作符
前置式++/–必須返回被增量或者減量的引用
字尾式操作符必須返回舊值,並且應該是值返回而不是引用返回
11、輸入操作符》和輸出操作符《必須定義為類的友元函式
四.過載操作符,>>,<<
首先看類的定義
typedef
int datetype;
class array
}~array()
datetype&operator(int i);
friend ostream&operator
<<(ostream&_cout, const array&a);//為何有返回值
friend istream&operator>>(istream&_cin, array&a);//因為a要改變,不能為const
private:
datetype*pdata;//指向陣列的指標
size_t size;//陣列的大小
size_t b;//該成員在過載》時用到
};
[ ]的過載
datetype&array::operator(int i)//引數為陣列的下標,返回值為引用(考慮到返回值作為右值)
return pdata[i];
}
《的過載
ostream&operator
<<(ostream&_cout, const array&a)
1.ostream是乙個類,cout是它的物件
2.cout無法識別自定義型別的變數,所以要過載
3.《可以過載為成員函式,但是輸出形式是這樣的a<4.在過載的時候不要加換行,換行不應該在過載中實現。
5.為何有返回值(為了滿足連續輸出cout
<6.返回值為何為引用(如果返回返回值,返回的臨時變數具有常性,它的狀態不可修改(cout
7.第乙個引數不可以以值的形式傳遞會生成cout的臨時物件(增加開銷),會呼叫其拷貝建構函式(在vs2013中該函式是私有屬性的,不允許呼叫)
與《類似,就不重複敘述了。
操作符過載
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...