[問題] 關於繼承的建構子

看板C_and_CPP作者 (夜夜米)時間13年前 (2012/03/28 09:18), 編輯推噓2(204)
留言6則, 5人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC2008 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 沒有 問題(Question): 有關繼承與建構子的問題 有3個class 大致如下 class A{ protected: void *memory; public: A(){ mem = NULL; } }; class B: virtual protected A{ public: B(): A(){} }; class C: public B{ public: C(): B(){} // 寫法1 C(): { this->B::B(); } // 寫法2 }; int main(){ C c; return 0; } 問題在C class的建構子 呼叫其繼承而來的建構子 兩種作法似乎不太一樣 寫法1: 成員memory順利變成NULL 寫法2: 成員memory在C::C()內順利變成NULL 但一回到main就又變回0xFEFEFEFE 為什麼會這樣子呢? 兩種做法不都應該是一樣的結果嗎? 還是我誤解了什麼地方呢? 謝謝各位板大替小的解惑 餵入的資料(Input): 預期的正確結果(Expected Output): 寫法1與寫法2 成員men皆應該變成NULL 錯誤結果(Wrong Output): 寫法2的memory是0xFEFEFEFE 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.114.54.45 ※ 編輯: yayarice 來自: 140.114.54.45 (03/28 17:37)

03/28 19:20, , 1F
誰教你寫法2 的,去扁他
03/28 19:20, 1F

03/28 23:15, , 2F
這編不過啊!
03/28 23:15, 2F

03/29 00:57, , 3F
這和我之前發問的有點像XD
03/29 00:57, 3F

03/29 15:53, , 4F
03/29 15:53, 4F

03/30 01:16, , 5F
寫法2會先呼叫default的B的Ctor 然後才執行你的呼叫
03/30 01:16, 5F

03/30 01:16, , 6F
理論上會有錯 VS2008可以過嗎?
03/30 01:16, 6F
文章代碼(AID): #1FSjTG1- (C_and_CPP)