C 之運算子過載 2

2021-09-08 17:17:05 字數 2039 閱讀 8892

上一節主要講解了c++裡運算子過載函式,在看了單目運算子(++)過載的示例後,也許有些朋友會問這樣的問題。++自增運算子在c或c++中既可以放在運算元之前,也可以放在運算元之後,但是前置和後置的作用又是完全不同的(q前置運算子:先加1,再賦值;後置運算子:先賦值,再加1)。那麼要怎麼過載它們,才可以有效的區分開來呢?今天我就來說說c++中是怎麼處理前置運算子和後置運算子的過載的。以及介紹一下插入運算子(>>)和提取運算子(<

1.在c++裡編譯器是根據運算子過載函式引數表裡是否插入關鍵字int來區分前置還是後置運算。比如:

#include "

stdafx.h

"#include

class tdpoint//

三維座標

tdpoint

operator++();//

成員函式過載前置運算子++

tdpoint operator++(int);//

成員函式過載後置運算子++

friend tdpoint operator++(tdpoint& point);//

友元函式過載前置運算子++

friend tdpoint operator++(tdpoint& point,int);//

友元函式過載後置運算子++

void

showpoint();

};tdpoint tdpoint::

operator++()

tdpoint tdpoint::

operator++(int

)tdpoint

operator++(tdpoint&point)

tdpoint

operator++(tdpoint& point,int

)void

tdpoint::showpoint()

intmain()

結果:

從示例**裡可以清楚的看出,後置運算子過載函式比前置運算子過載函式多了乙個int型別的引數,這個引數只是為了區別前置和後置運算子,此外沒有任何作用。所以在呼叫後置運算子過載函式時,int型別的實參可以取任意值。

2.在c++中,操作符"<>"被定義為左位移運算子和右位移運算子。由於在iostream標頭檔案中對它們進行了過載,使得它們可以用基本資料的輸出和輸入。

#include "

stdafx.h

"#include

intmain()

結果:

插入運算子"<

ostream& operator<

提取運算子">>"也是如此,左運算元為istream類的物件,右運算元為基本型別資料。標頭檔案iostrem對其過載的函式原型為istream& operator>>(istream& ,型別名);提取運算子也不能作為其他類的成員函式,可以是友元函式或普通函式。它的一般定義格式為:

istream& operator>>(istream& ,自定義類名&);

#include "

stdafx.h

"#include

class complex //

複數類 friend std::ostream&operator

<

友元函式過載提取運算子"<

friend std::istream&operator>>(std::istream& i,complex& com);//

友元函式過載插入運算子">>"

};std::ostream&operator

<

std::istream&operator>>(std::istream& i,complex&com)

intmain()

結果:

C 之運算子過載 2

上一節主要講解了c 裡運算子過載函式,在看了單目運算子 過載的示例後,也許有些朋友會問這樣的問題。自增運算子在c或c 中既可以放在運算元之前,也可以放在運算元之後,但是前置和後置的作用又是完全不同的 q前置運算子 先加1,再賦值 後置運算子 先賦值,再加1 那麼要怎麼過載它們,才可以有效的區分開來呢...

c 運算子過載(2)

語法格式 1 類的內部 函式型別 operator 運算子 形參表 2 類中宣告原型 類外定義 class x 函式型別 x operator 運算子 形參表 說明 可以用 return this 返回 當前物件的值 雙目運算子過載 對雙目運算子而言,成員運算子過載函式的形參表中僅有乙個引數,它作為...

C 運算子過載之過載單目運算子

單目運算子只有乙個運算元,但是其過載方法類似於雙目運算子,在這裡以過載單目運算子 為例,介紹單目運算子的過載 注意 和 運算子有兩種使用方式,前置自增運算子和後置自增運算子,它們的作用是不一樣的,為了區分他們,c 約定,在自增 自減 運算子過載函式中,增加乙個int型別的形參,就是後置自增 自減 運...