c++類建立時,會產生乙個預設的賦值運算子函式:a& operator=(const a
&);普通類例項之間賦值可能沒問題,但當類成員變數中有指標引用的動態記憶體時,複製後只是簡單地將指標值複製,而沒有將其指向的動態記憶體也拷貝乙份,這樣即多個類例項內的指標指向同一動態記憶體,當類例項析構時,會導致這塊動態記憶體delete多次而產生錯誤。這也就說明需要我們對一些特別的類過載其賦值運算子函式,即深拷貝!
這裡只是介紹一下深拷貝的意思,不具體細說。下面是討論賦值運算子函式的返回值。看下**:
#include using namespace std;
class a;
a(int n)
operator int()
a& operator=(const a a)
};int main();
a(int n)
operator int()
a& operator=(const a a)
};int main();
a(int n)
operator int()
operator=(const a a)
};int main();
explicit a(int n) //與上面相比,加上了乙個explicit
operator int()
operator=(const a a)
};int main(),在宣告類例項時:
a a = 3; \\錯誤
a a(3); \\正確
a a; a = 3; \\錯誤
所以,當遇到上面例子的 a=3這個過程時,就會因為找不到轉換函式而報錯!
關於型別轉換和運算子過載其實挺迷惑人的,大家自己多動手寫例子,慢慢推導體會!看幾遍別人的推導分析,比不上自己一次的動手實驗!
C 運算子過載賦值運算子
自定義類的賦值運算子過載函式的作用與內建賦值運算子的作用類似,但是要要注意的是,它與拷貝建構函式與析構函式一樣,要注意深拷貝淺拷貝的問題,在沒有深拷貝淺拷貝的情況下,如果沒有指定預設的賦值運算子過載函式,那麼系統將會自動提供乙個賦值運算子過載函式。賦值運算子過載函式的定義與其它運算子過載函式的定義是...
C 賦值運算子過載
c 賦值運算子過載,為什麼要返回引用?查了許多資料,基本有兩種說法 一 c c 賦值運算子的本意為 返回左值的引用 左值 賦值號左面的變數而非其值 可用以下程式段測試 int a,b 3,c 2 a b c cout 對於x y x,y均為物件時 若不返回左值的引用,將會生成臨時物件。如果不處理x ...
C 賦值運算子過載
不少知識點 在乙個類裡面沒有定義 過載 賦值運算子 時,那麼編譯器會生成乙個預設的賦值函式。它實現物件成員間的一一賦值,實現的是乙個淺拷貝 logic copy 當資料成員裡面如果有指標,則編譯器預設的賦值運算子不能滿足要求,會出現記憶體洩露。淺拷貝 通過物件之間的一一賦值,使得物件中的指標指向同一...