C 中的過載運算

2021-07-30 14:12:04 字數 1228 閱讀 8646

當運算子被應用於類型別的物件時,c++語言允許我們為其指定新的含義,重新定義該運算子的含義。

1)過載運算子本質上還是乙個函式。因此也有函式相應的各種元素結構。

函式名:由關鍵字operator 和對應的運算子組成。

引數:引數數量和運算子作用的運算子物件個數一樣多,

成員運算子函式的左側運算物件隱式地繫結到this上。

2)可以過載大多數但並不是全部大運算子。不能過載的運算子有:( ::     .*    .    ? :  )。

3)只能過載已有的運算子,不能發明新的運算子。

4)對於乙個運算子函式來說,它要麼是類的成員,要麼至少含有乙個類型別引數。

5)通常情況下,不應該過載逗號、取址、邏輯與、邏輯或這幾種運算子。

6)在定義過載運算子時,應盡量使用與內建型別一致的含義。

7)對於將運算子作為成員還是非成員函式,可以考慮一下幾方面:a)賦值、下標、呼叫、成員訪問箭頭運算子必須是成員;b)復合賦值運算子一般作為成員,但非必須;c)改變運算物件狀態的運算子或者和給定型別密切相關的運算子,通常應該是成員;d)具有對稱性的運算子可能轉換任意一端的運算物件,通常為非成員。

1)輸入輸出運算子必須是非成員函式。

2)通常情況下,輸出運算子的第乙個形參是乙個非常量ostream物件的引用,第二個形參一般是乙個常量的引用。

3)通常情況下,輸入運算子的第乙個形參是將要讀取流的引用,第二個形參是將要讀入到的物件的引用;輸入運算子需要有處理輸入失敗的情況。

通常情況下將算術運算子定義成非成員能函式,允許左側或者右側運算物件進行轉換,形參通常是常量的引用。

1)通常情況下將關係運算子定義成非成員能函式,允許左側或者右側運算物件進行轉換,形參通常是常量的引用。

2)對於相等運算子,只有類型別中的所有資料成員都相等才認為兩個物件相等。

3)通常關係運算子應該:a) 定義順序關係,令其與關聯容器中對關鍵字的要求一致;b)如果類同時也含有==運算子,則定義一種關係令其與==保持一致。

1)不論形參的型別是什麼嘛,賦值運算子都必須定義為成員函式。

2)復合賦值運算子盡量定義成成員函式,為了與內建型別的復合賦值保持一直,通常返回型別為左側運算物件的引用。

1)下標運算子必須是成員函式。

2)下標運算子返回的物件通常是所訪問元素的引用,可以放在賦值運算子的任何一端,因此最好定義常量和非常量版本的兩種下標運算子。

1)建議將這兩種運算子定義為成員函式。

2)為和內建型別一致,最好定義前置版本和後置版本兩種運算子。

C 中關於過載運算子

相信很多朋友和我一樣一開始看的時候很不理解 對 的過載 類內定義 cmytime cmytime operator double n const 過載為乘法運算子函式。然後有這句 adjusted total 1.5 看作是 adjusted total.operator 1.5 就比較容易理解了,...

C 過載運算子

運算子過載是一種形式的c 多型。在c 中,編譯器有能力把乙個由資料 物件和操作符共同組成的表示式,解釋為對乙個全域性或成員函式的呼叫。該全域性或成員函式被稱為操作符函式,通過重定義操作符函式,可以實現針對自定義型別 結構,類 的運算法則,並使之與內建型別一樣參與各種表示式。過載運算子可使 看起來更加...

C 過載運算子

本文主要講述加號運算子 自增運算子 流提取運算子運 流插入運算子 先給出vector類 class vector 建構函式 vector const vector v 拷貝建構函式 vector operator const vector v 過載 vector operator 過載前置自增運算子...