預設的賦值操作符用於處理同類物件之間的賦值,不要與複製建構函式混淆.如果是建立新的物件,則呼叫複製(拷貝)建構函式,如果是修改已有物件的值,則呼叫賦值操作符
myclass aclass;
myclass bclass=aclass; // 呼叫複製建構函式
myclass cclass;
cclass=aclass; // 呼叫賦值操作符
一般來說,如果需要顯式定義複製建構函式,則基於相同的原因,也需要顯式定義賦值操作符
myclass::myclass(const myclass& aclass); // 複製建構函式
myclass& myclass::operator=(const myclass& aclass); // 賦值操作符
定義賦值操作符時要注意自賦值導致遞迴的問題,如
myclass aclass;
aclass=aclass;
所以賦值操作符應該在定義的時候檢測自賦值,如果發現自賦值,則立即返回自身或其引用
myclass& myclass::operator=(const myclass& aclass)
賦值操作符
與類要控制初始化物件的方式一樣,類也定義了該型別物件賦值時會發生什麼 sales item trans,accum trans accum 與複製建構函式一樣,如果類沒有定義自己的賦值操作符,則編譯器會合成乙個。過載操作符是一些函式,其名字為 operator 後跟著所定義的操作符的符號。因此,通過...
C 賦值操作符
定義類時,編譯器會自動幫我們定義的有四個 建構函式 析構函式 複製建構函式 賦值操作符。賦值操作符定義了該型別的物件賦值時會發生什麼。過載操作符是一些函式,其名字為operator後跟著所定義的操作符的符號。通過定義名為operator 的函式,我們可以對賦值操作符進行定義。該函式有返回值和形參表。...
賦值操作符概要
乙個類預設有乙個賦值函式,類似這樣的 classtype operator const classtype 這個賦值函式也就是乙個簡單的 操作符的過載形式,當你要將乙個物件賦值給另乙個物件時呼叫 有關賦值函式,有以下概要問題 以string類為例 class string 1.錯誤的定義形式 str...