Re: [問題] 繼承關係下的 assignment overloading?

看板C_and_CPP (C/C++)作者 (賺P幣去賭博!!)時間18年前 (2006/05/25 11:40), 編輯推噓3(301)
留言4則, 3人參與, 最新討論串1/1
※ 引述《yawaog (^_^)》之銘言: : 如果 base class 和 derived class 都有動態配置記憶體 : 那當一個 derived class 物件 assign 給另一個 derived : class 物件時, 怎麼做比較好呢? : 我寫了程式測了一下, 並不會自動呼叫 base class 的 operator= 耶, : 不會是要在 derived class 的 operator= 一併處理吧 你答對了. XD : Base& Base::operator=(const Base& b){ : delete pB; : pB = new char[strlen(b.pB)+1]; : strcpy(pB,b.pB); : return *this; : } => the better way : Base& Base::operator= ( const Base& b ) { if( this != &b ) { // here is your code. } return *this; } : Derived& Derived::operator=(const Derived& d){ : delete pD; : pD = new char[strlen(d.pD)+1]; : strcpy(pD,d.pD); : return *this; : } write like this : Derived& Derived::operator=( const Derived& d ) { if( this != &d ) { // call operator = of Base class. static_cast<Base&>(*this) = static_cast<const Base&>(d); // here is your code. // ... } return *this; } 有錯請指教 :) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.246.54 ※ 編輯: babyghost 來自: 140.116.246.54 (05/25 11:55)

05/25 12:40, , 1F
ps. 視情況決定是否呼叫BASE的op=
05/25 12:40, 1F

05/25 14:13, , 2F
太漂亮了,原來可以這樣叫Base的op=,不知怎麼怪感動的,thx
05/25 14:13, 2F

05/25 14:28, , 3F
資工系?, 和 246.50 同學?
05/25 14:28, 3F

05/25 15:53, , 4F
XD 同 lab 吧 XD
05/25 15:53, 4F
文章代碼(AID): #14TISrvo (C_and_CPP)
文章代碼(AID): #14TISrvo (C_and_CPP)