運用copy函式和copy assignment函式進行賦值操作應該注意的兩點:
1) 複製所有local成員變數
2) 呼叫所有基類內的適當的copying函式。
這裡面有乙個很可怕的規則:當你不用編譯器預設的拷貝函式或者賦值函式時,編譯器也不會對你自己寫的這兩個函式進行報警。所以必須要很謹慎和小心。
對於沒有繼承的類來說,寫這兩個函式一般注意指標型別的複製就可以了
class base;
base& base::operator=(const base& base)
如果後來增加了乙個int age,但operator=裡面什麼都沒有做,編譯器不會出錯!!
還有一種是對於繼承類:
class subbase : public base;如果
subbase::subbase(subbase &subbase)
:subage(subbase . subage) //這樣做就夠了嗎?
subbase& subbase::operator=(const subbase& subbase)
如果僅僅這樣,就說明了當進行coyp建構函式時,實際上真正賦值的物件只有子類subbase類中的subbase;而基類裡面並沒有實現正確賦值,因為你沒有顯示的呼叫基類的的這copy建構函式,沒有顯示呼叫,編譯器就會預設使用無參建構函式進行初始化。
呼叫到copy assignment函式時是對基類的所有東西不做任何操作。
怎麼辦?
subbase::subbase(subbase &subbase)//
: base(subbase);
,subage(subbase . subage)
subbase& subbase::operator=(const subbase& subbase)
在 c++ 中,賦值和拷貝是不同的,
拷貝建構函式是對未初始化的記憶體進行初始化操作
而賦值是對現有的已經初始化的物件進行操作。(這裡我對「已經初始化」的理解是已經呼叫了建構函式,並且建構函式體可以未執行,只要呼叫到即可)
C 入門系列 拷貝建構函式 拷貝賦值函式
1.什麼是拷貝建構函式?什麼時候使用拷貝建構函式?第乙個引數為自身型別引用的建構函式。比如class foo 在以下情況中被使用 拷貝初始化 用 定義變數 foo b foo a b 函式引數採用值傳遞而不是指標傳遞時 foo a b 返回型別為非引用型別的函式返回乙個物件 foo example ...
C 賦值函式與拷貝建構函式
一看到 操作符,認為必然呼叫賦值函式,然而在下面的例子中,語句a b c顯示的是呼叫拷貝建構函式。結論 在看到 操作符為物件賦值的時候,如果是在物件的定義時候出現則呼叫拷貝建構函式,如果是不是,例子中的b d,則為賦值函式。include using namespace std class a a ...
C 拷貝建構函式與賦值函式
c 拷貝建構函式與賦值函式 c 的拷貝函式和賦值函式既有聯絡又有區別,不細究的話很容易搞混,遂以小例示之如下,權作解惑之用 test.cpp include include include using namespace std class book book const book book boo...