程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 從一個二級題來看成員函數重載運算符和友元函數重載運算符,重載運算符

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

編輯:C++入門知識

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


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

A)=,+,-,\

B)[],+,(),new

C)->,+,*,>>

D)<<,>>,+,*

正確答案為D

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

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

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

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

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

 

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

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

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved