1.不能用友元過載的運算子:
= () ->
原因有2種說法:
(1) operator= 時可以將友元函式宣告和類分開放,那麼在這個operator=函式之前的**遇到=號就是預設的=操作符,在operator=之後的**用的就是這個過載的operator =
造成了混亂.
(2) 作為成員函式過載時,呼叫物件就是第乙個引數,比如=作為成員函式過載,那麼class1=class2,class1這個呼叫物件就是=的第乙個引數,即第乙個運算元,如果作為友元函式過載,那麼就不能像class1=class2這樣呼叫了,這與=本來的用法就不一樣,因為作為友元函式過載的話,=必須要兩個運算元
我個人偏向說法(1),(2)好像也有道理,但是感覺就是不能完全說服自己
2.對於需要函式呼叫作為左值的,需要使用引用。
如:int & operator(int i)const;zai 在賦值表示式a[i]=i+1中,a[i]作為左值操作合法。所以,當過載運算子函式呼叫需要作為左值時,應該使用引用。
原因:可以減少函式返回值時匿名物件資料複製帶來的開銷。 除
外,還有++,
--,=等
3.過載《和》
friend ostream& operator<<(ostream &output,const vector &a);
friend istream& operator>>(ostream &output,const vector &a); //沒有&則cin>>a輸不進
//去,a值不變
4.complexoperator+(const complex &c1,constcomplex &c2)
c=c1+25;常引用可以掛在數字上
5.不能過載的運算子
. .* :: ?: sizeof
6.前置自增表示式 ++aobj 編譯器解釋為aobj.operator++() 對應原型a &a::operator++() 或者friend a & operator++(a &)
後置自增表示式 aobj++ 編譯器解釋為aobj.operator++(0) 對應原型a &a::operator++(int) 或者friend a & operator(a &,int)
運算子過載筆記
建立臨時物件 將自加後的物件賦給另乙個物件,我們需要建立乙個臨時物件,然後返回該物件 include using namespace std class num num int get const void set int x num operator private int n int main ...
運算子過載學習筆記
定義乙個複數類complex,使之能用於複數的加法運算。編寫程式,求兩複試之和。ifndef complex h define complex h class complex endif include include complex.h complex complex complex comple...
c 運算子過載筆記
1.運算子過載的六個注意事項 1 過載運算子函式的引數個數,應該與參與這個運算子的運算物件數量一樣多,但是如果是成員函式,則引數數量要少乙個,因為第乙個引數是this。例如 includeusing namespace std class test int operator const test v...