【注意】運算符重載

格式html

《返回值類型》 operator 【運算符】(參數表)web

{函數

//函數體ui

}this

【注意】spa

1當運算符重載爲類的成員函數時,函數的參數個數比原來的操做數要少一個(後置單目運算符除外),這是由於成員函數用this指針隱式地訪問了類 的一個對象,它充當了運算符函數最左邊的操做數。所以:.net

 

(1) 雙目運算符重載爲類的成員函數時,函數只顯式說明一個參數,該形參是運算符的右操做數。unix

 

(2) 前置單目運算符重載爲類的成員函數時,不須要顯式說明參數,即函數沒有形參。指針

(3) 後置單目運算符重載爲類的成員函數時,函數要帶有一個整型形參。orm

 

調用成員函數運算符的格式以下:

 

    <對象名>.operator <運算符>(<參數>)

 

    它等價於

 

    <對象名><運算符><參數>

 

 例如a+b等價於a.operator +(b)。通常狀況下,咱們採用運算符的習慣表達方式。

 

2當運算符重載爲類的友元函數時,因爲沒有隱含的this指針,所以操做數的個數沒有變化,全部的操做數都必須經過函數的形參進行傳遞,函數的參數與操做數自左至右一一對應。 

 調用友元函數運算符的格式以下:

 

    operator <運算符>(<參數1>,<參數2>)

 

    它等價於

 

    <參數1><運算符><參數2>

 

    例如a+b等價於operator +(a,b)

3兩種重載形式的比較

 

在多數狀況下,將運算符重載爲類的成員函數和類的友元函數都是能夠的。但成員函數運算符與友元函數運算符也具備各自的一些特色:

 

(1) 通常狀況下,單目運算符最好重載爲類的成員函數;雙目運算符則最好重載爲類的友元函數。

 

(2) 如下一些雙目運算符不能重載爲類的友元函數:=、()、[]、->。

 

(3) 類型轉換函數只能定義爲一個類的成員函數而不能定義爲類的友元函數。

 

(4) 若一個運算符的操做須要修改對象的狀態,選擇重載爲成員函數較好。

 

(5) 若運算符所需的操做數(尤爲是第一個操做數)但願有隱式類型轉換,則只能選用友元函數。

 

(6) 當運算符函數是一個成員函數時,最左邊的操做數(或者只有最左邊的操做數)必須是運算符類的一個類對象(或者是對該類對象的引用)。若是左邊的操做數必須是一個不一樣類的對象,或者是一個內部類型的對象,該運算符函數必須做爲一個友元函數來實現。

 

(7) 當須要重載運算符具備可交換性時,選擇重載爲友元函數。

【轉】http://blog.chinaunix.net/uid-21411227-id-1826759.html

相關文章
相關標籤/搜索