運算子過載筆記

2021-07-11 14:34:26 字數 1178 閱讀 3505

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