c++重載運算符


C++中重載運算符

注意事項:

  1. 重載運算符函數要求必須有一個參數為類對象.
  2. 重載運算符函數不可以有默認參實參.(operator() 除外)
  3. 重載運算符函數的參數個數與運算符作用的運算對象數量相同, 對於二元運算符來說,左側運算符對象傳遞給第一個參數,右側運算符對象傳遞給第二個參數.
  4. 重載之后的運算符本質上就是一個函數調用, 原生運算符的求值順序以及運算符的短路屬性並不會保留下來.

C++中哪些運算符可以重載?

大多數運算符都可以重載,有4個運算符不可以重載. 分別是: 作用域運行符::/成員訪問運算符./成員訪問指針運算符.*(c++primer第7339頁)/三目運算符? : .

哪些運算符應該作為類成員函數進行重載?

  1. 5個運算符必須作為類成員函數進行重載: 賦值運算符=/下標運算符[]/箭頭運算符->/函數調用運算符(), 以及類型轉換運算符.
  2. 改變對象狀態的運算符以及與給定類型非常相關的運行符,建立寫為類成員運算符. 例如: 復合賦值運算符/++--運算符/解引用運算符*等.
  3. 具有對稱性的運算符通常為普通的非成員運算符, 例如: 關系/相等/算術運算符等.
  4. 輸入輸出運算符(>><< )必須是普通的非類成員函數,因為:如果是類成員函數的話,this指針綁定在第一個參數上了, 寫法不符合常規了(例如: 類對象 << cout).

重載運算符時,有哪些值得注意的事項?

  1. 算術運算符應該返回類型的值, 賦值運算符/復合賦值運算符應該返回左側運算對象的引用,
  2. 如果一個類有算術運算符,則也應該定義它的復合賦值運算符, 並且算術運算符的功能由復合賦值運算符來完成.
  3. 下標運算符通常返回所訪問對象元素的引用作為返回值,並且通常是返回普通引用,另一個是作為類的常量成員並返回常量引用, 這樣一來就可以作用於常量對象了.
  4. 前置遞增遞減運算符返回對象的引用, 后置遞增遞減運算符多了一個int類型形參,並且返回類型為臨時對象的值.
  5. 解引用運算符(*)與箭頭運算符(->)關系比較密切. 解引用運算符返回一個對象的引用. 箭頭運算符返回對象的指針,而該對象是通過調用解引用運算符函數得到, 再加一個取地址符.
  6. 關於箭頭運算符,它比較特殊,: 它永遠不能丟掉成員訪問的基本含義, 當我們重載箭頭時,可以改變的只有它從哪個對象當中獲到成員.因此, 重載箭頭運算符時的返回值必須是指向類對象的指針或一個重載了->的類對象.
  7. 類型轉換運算符沒有顯式的返回類型,也沒有形參.

怎么能熟悉運算符重載?

平時基本很少寫運算符重載的相關代碼, 想要熟悉,只能多使用他們!!!


免責聲明!

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



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