在c++中不可過載的運算子有:
sizeof
可過載的運算子有:
!=new
delete
其中注意一下:c++中new和delete與c語言中malloc和free不一樣。c語言中malloc和free市庫函式;在c++中new和delete是運算子;在使用new時相當於預設使用建構函式+malloc,在使用delete時相當於預設使用析構函式+free.
我們在剛開始學物件導向時就學習了c++中的六個預設建構函式,其中有乙個就是賦值運算子過載函式,它過載的是賦值運算子,想必大家都知道了,那麼這篇博文就先對賦值運算子過載函式具體的要求和寫法做以總結。其次再舉例說明其他的過載函式。
當我們給出乙個類的宣告時,寫賦值運算子函式要考慮三個方面:
1、傳參:
1.1:對於操作運算子過載函式要傳的引數可以是引用也可以不是引用。但考慮到傳引用時不用生成乙個臨時物件,不用呼叫拷貝建構函式,效率高,我們選擇傳引用。
1.2:考慮到修飾的形參不能被修改且要能接收隱式產生的臨時量,我們要傳常引用。
2、返回值:
2.1:考慮到要能進行連續賦值,我們要傳引用,因為如果不傳引用的話,傳回去第二次賦的值就給了臨時量,而且表示式結束時臨時量被銷毀,不能做到連續賦值。
2.2:函式結束前返回例項自身的引用,既*this。
3、函式體:
3.1:判斷自賦值,如果自賦值,直接返回。
3.2:釋放自身的資源,防止記憶體洩漏。
3.3:開闢新的資源,防止同一塊記憶體區域被釋放多次,導致程式奔潰。
有了以上的掌握,接下來借助乙個類cstring我們書寫+ == != << >>運算子過載函式
#include#includeusing namespace std;
class cstring
;cstring operator+(const cstring& lhs,const cstring& rhs)
/*必須寫在類外,因為要滿足所有情況,
比如:cstring str3=str1+"world";或者cstring str4="hello"+str1;*/
總結:(1)、加法運算子過載函式一定要寫在類外,因為傳進去的第乙個引數不一定是乙個物件(沒有this指標)。
(2)、《或者》運算子過載也要寫在類外,因為《和》都是由緩衝區的乙個例項來呼叫,不是類例項出的物件來呼叫。
(3)、對於返回值是不是要返回引用只需要判斷返回之後是否要被修改,如果要修改傳引用,否則不用傳引用。
C 運算子過載函式之成員運算子過載函式
5.2.3 成員運算子過載函式 在c 中可以把運算子過載函式定義為某個類的成員函式,稱之為成員運算子過載函式。1.定義成員運算子過載函式的語法形式 1 在類的內部,定義成員運算子過載函式的格式如下 函式型別 operator 運算子 形參表 2 成員運算子過載函式也可以在類中宣告成員函式的原型,在類...
C 運算子過載函式
5.運算子過載 5.1 在類外定義的運算子過載函式 c 為運算子過載提供了一種方法,即在執行運算子過載時,必須定義乙個運算子過載函式,其名字為operator,後隨乙個要過載的運算子。例如,要過載 號,應該寫乙個名字為operator 的函式,其他的運算子也是如此。函式 功能 operator 加法...
C 運算子過載和函式過載
c 允許在同一作用域中的某個函式和運算子指定多個定義,分別稱為函式過載和運算子過載。過載宣告是指乙個與之前已經在該作用域內宣告過的函式或方法具有相同名稱的宣告,但是它們的引數列表和定義 實現 不相同。當呼叫乙個過載函式或過載運算子時,編譯器通過把您所使用的引數型別與定義中的引數型別進行比較,決定選用...