從一個二級題來看成員函數重載運算符和友元函數重載運算符


先上題:下列運算符都可以被友元函數重載的是:

A)=,+,-,\

B)[],+,(),new

C)->,+,*,>>

D)<<,>>,+,*

正確答案為D

我們知道,在運算符重載,友元函數運算符重載函數與成員運算符重載函數的區別是:友元函數沒有this指針,而成員函數有,因此,在兩個操作數的重載中友元函數有兩個參數,而成員函數只有一個。

因此,我們可以總結如下:

1.對雙目運算符而言,成員函數重載運算符的函數參數表中只有一個參數,而用友元函數重載運算符函數參數表中含有兩個參數。
  對單木運算符來說,成員函數重載運算符的函數參數表中沒有參數,而用友元函數重載運算符函數參數表中含有一個函數。這個問題要搞清楚,有一個this
指針的問題。。。
2.雙目運算符一般可以用友元函數重載和成員函數重載,但有一種情況只可以用友元函數重載。
  即:雙目運算符左邊的變量是一個常量,而不是對象!!!這點很重要的額。

而關於運算符的重載,有以下經驗可以記着:

   1.對於單目運算符,建議選擇成員函數;
   2.對於運算符“=,(),[],->”只能作為成員函數;
   3.對於運算符“+ =,-=,/=,*=,&=,!=,~=,%=,<<=,>>=”建議重載為成員函數;
   4.對於其他運算符,建議重載為友元函數。

 

那么下面這個題的答案也就很明顯了:

將x+y*z中的“+”用成員函數重載,“*”用友元函數重載應該寫為:?

答案為:x.operator+(operator*(y,z))


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM