操作符的過載

2021-07-12 04:03:30 字數 1788 閱讀 5334

一.什麼是操作符的過載?

操作符的過載就是就是把已經定義的、有一定功能的操作符進行重新定義,來完成更為細緻具體的運算等功能。

二.為什麼要進行操作符的過載?

當你自定義了乙個類,想要把兩個類物件相加,而傳統的』+』無法對類物件進行運算,這時候就需要進行運算子的過載了。

三.過載的過程中需要注意什麼?

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