賦值符常常初學者的混淆。這是毫無疑問的,因為』=』在程式設計中是最基本的運算子,可以進行賦值操作,也能引起拷貝建構函式的呼叫。
如果沒有過載賦值運算子,編譯器會自動建立預設的賦值運算子過載函式。行為類似預設拷貝構造,進行簡單值拷貝。class
person
public
:person
(int id,
int age)
//過載賦值運算子
person&
operator=(
const person& person)
private
:int mid;
int mage;};
//1. =號混淆的地方
void
test01()
//2. 賦值過載案例
void
test02()
//常見錯誤,當準備給兩個相同物件賦值時,應該首先檢查一下這個物件是否對自身賦值了
//對於本例來講,無論如何執行這些賦值運算都是無害的,但如果對類的實現進行修改,那麼將會出現差異;
//3. 類中指標
class
person2
public
:person2
(char
* name,
int id,
int age)
#if 1
//過載賦值運算子
person2&
operator=(
const person2& person)
this
->pname =
newchar
[strlen
(person.pname)+1
];strcpy
(this
->pname,person.pname)
;this
->mid = person.mid;
this
->mage = person.mage;
return
*this;}
#endif
//析構函式
~person2()
}private
:char
* pname;
int mid;
int mage;};
void
test03()
C 運算子過載賦值運算子
自定義類的賦值運算子過載函式的作用與內建賦值運算子的作用類似,但是要要注意的是,它與拷貝建構函式與析構函式一樣,要注意深拷貝淺拷貝的問題,在沒有深拷貝淺拷貝的情況下,如果沒有指定預設的賦值運算子過載函式,那麼系統將會自動提供乙個賦值運算子過載函式。賦值運算子過載函式的定義與其它運算子過載函式的定義是...
C 賦值運算子過載
c 賦值運算子過載,為什麼要返回引用?查了許多資料,基本有兩種說法 一 c c 賦值運算子的本意為 返回左值的引用 左值 賦值號左面的變數而非其值 可用以下程式段測試 int a,b 3,c 2 a b c cout 對於x y x,y均為物件時 若不返回左值的引用,將會生成臨時物件。如果不處理x ...
C 過載賦值運算子
c 類建立時,會產生乙個預設的賦值運算子函式 a operator const a 普通類例項之間賦值可能沒問題,但當類成員變數中有指標引用的動態記憶體時,複製後只是簡單地將指標值複製,而沒有將其指向的動態記憶體也拷貝乙份,這樣即多個類例項內的指標指向同一動態記憶體,當類例項析構時,會導致這塊動態記...