C 之運算子過載(二元)

2022-05-12 00:59:31 字數 1774 閱讀 6542

一、加號+

1.成員函式過載

2.友元函式過載

二、輸出符號<<

三、索引符號 [ ]

四、補充說明

(一)為什麼《運算子的過載必須定義為友元

如果在類中定義非友元成員函式,預設第乙個引數缺省會傳入this*指標,這時就無法實現cout在前《物件在後的格式

因為二元運算子中的呼叫格式是 引數一 運算子 引數二

這也就是為什麼 加號運算子可以使用非友元成員函式,因為引數一是乙個this*指標,引數二是其它物件

假設定義為非友元成員函式,那麼第乙個引數系統預設為this*(且無法更改),第二個引數是cout

那麼呼叫格式就變成了 coor << cout了,這就是不能定義為非友元成員函式的原因

(二)這裡對於輸出運算子過載講得一般,當時課程上學習的時候,這裡返回值為out是有原因的。

cout<

上面這個例子中,第一次過載《的時候cout作為第乙個引數,coor作為第二個引數,返回出來out的引用,這個out引用的是"cout<

第二次過載的時候是將這個cout<

來吧!讓我給您們解釋一下為什麼《只能友元,而只能成員過載;

簡而言之:

<1> 對於友元過載沒有this指標指向當前物件的!這個可以從單目運算子過載時返回形參而不能返回this可知!

所以必須為引數一+運算子+引數二出現的表示式才能用友元!

<2> 二元運算子的成員函式過載,或一元運算子成員函式過載,預設在符號前有個this指標,指向當前物件的!

這也就為什麼,二元過載還需有一參,一元過載不用參!

好了~~~這就很好解釋,若《採用成員函式過載,那麼this指標指向的是cout!這是錯誤的~~~this無法例項;其次採用友元,那就沒有第二引數了~~~

3.對於輸出運算子「<

4.索引運算子「」不能採用友元函式過載 原因??

友元函式過載的第乙個引數可以是成員函式過載中的this指標也可以是其他的值,可是索引運算子的第乙個引數必須是this指標,

因為只有第乙個引數是this指標才能夠傳入索引,才能夠使得這個索引所表達的是當前這個物件當中的成員

C 二元運算子過載

二元運算子需要兩個引數,下面是二元運算子的例項。我們平常使用的加運算子 減運算子 乘運算子 和除運算子 都屬於二元運算子。就像加 運算子。下面的例項演示了如何過載加運算子 類似地,您也可以嘗試過載減運算子 和除運算子 include using namespace std class box voi...

二元運算子過載

siwuxie095 二元運算子過載 所謂 二元運算子,即 這個符號與兩個運算元進行運算 1 加號 的過載 加號 的過載方式有兩種 一種是友元函式過載,一種是成員函式過載 1 先來看成員函式過載,如下 定義乙個座標類 coordinate 在類中宣告成員函式 operator 它的引數是 const...

二元加運算子

減法,乘法,除法在運算過程中,都是先將運算元,轉成數值,再進行後續操作,而加法,卻有所不一樣。當兩個數值相加時,加法運算子,跟減法操作符一樣,直接求和。var a 1 var b 2 a b 3當兩個字串相加時,加法運算子,這表現為字串拼接。var a 1 var b 2 a b 12 注意 只有有...