過載的++和–運算子有點讓人不知所措,因為我們總是希望能根據它們出現在所作用物件的前面還是後面來呼叫不同的函式。解決辦法很簡單,例如當編譯器看到++a(前置++),它就呼叫operator++(a),當編譯器看到a++(後置++),它就會去呼叫operator++(a,int).
class
complex
public
:complex()
//過載前置++
complex&
operator++(
)//過載後置++
complex operator++(
int)
//前置--
complex&
operator--(
)//後置--
complex operator--(
int)
void
showcomplex()
private
:int ma;
int mb;};
void
test()
優先使用++和–的標準形式,優先呼叫前置++。
如果定義了++c,也要定義c++,遞增操作符比較麻煩,因為他們都有字首和字尾形式,而兩種語義略有不同。過載operator++和operator–時應該模仿他們對應的內建操作符。
對於++和–而言,後置形式是先返回,然後物件++或者–,返回的是物件的原值。前置形式,物件先++或–,返回當前物件,返回的是新物件。其標準形式為:
呼叫**時候,要優先使用字首形式,除非確實需要字尾形式返回的原值,字首和字尾形式語義上是等價的,輸入工作量也相當,只是效率經常會略高一些,由於字首形式少建立了乙個臨時物件。
自增 自減運算子的過載
自增運算子 自減運算子 有前置 後置之分,為了區分所過載的是前置運算子還是後置運算子,c 規定 前置運算子作為一元運算子過載 過載為成員函式時 t operator t operator 過載為全域性函式時 t operator t t operatot t 後置運算子作為二元運算子過載,多寫乙個沒...
自增自減運算子
自增自減運算子 i 先使用i,然後i i 1 i 先使用i,然後i i 1 i 先i i 1然後使用i i 先i i 1 然後使用i 以下使用vc下除錯的結果,不同的編譯器可能有不同的結果。i 3 例1printf d i 結果輸出4 例2printf d i 結果輸出3 例3printf resu...
自增 ,自減 運算子
自增1運算子記為 其功能是使變數的值自增1。自減1運算子記為 其功能是使變數值自減1。自增1,自減1運算子均為單目運算,都具有右結合性。可有以下幾種形式 i i自增1後再參與其它運算。i i自減1後再參與其它運算。i i參與運算後,i的值再自增1。i i參與運算後,i的值再自減1。在理解和使用上容易...