[問題] virtual function 的疑惑1

看板C_and_CPP作者 (我愛阿蓉)時間16年前 (2010/02/10 14:52), 編輯推噓0(002)
留言2則, 1人參與, 最新討論串1/2 (看更多)
昨天問一些問題可能扯到virtual function 我就先查了一些資料 結果找到這網頁我覺得寫得不錯 但是當然我還是遇到一些無法理解的問題 http://www.vckbase.com/document/viewdoc/?id=1350 我從頭開始看 看到程序12. 他給我的"觀念"大概變成如下 class 有virtual function情況下 { **vptr <=多出一個指標 (型態我不知道) virtual void xxx(); virtual void yyy(); ......... }; 而virtual table 大概長得像這樣 *vtable[大小是你有幾個virtual function+1]; 而vptr=vtable vtable[0]=第一個virtual function的& [1]=第二個 [2]=NULL 如果是多重繼承 class Derive : public Base1, public Base2, public Base3 { Base1:: **vptr; Base2:: **vptr; Base3:: **vptr; ............ }; 若是這樣 照他寫法似乎 Base1::vptr會包含Derive的virtual function address 所以他在程序15. 有辦法呼叫fd gd 透過Base1的指標.... (所以是看繼承的順序 先繼承的先建構 也先把Derived 的virtual func填入vptr?) 以上是我目前的觀念 請問有沒有什麼錯誤呢?? 再來是要問一下我卡關的地方 進入程序16. 他這三行 cout << (DWORD)static_cast<Base1*>((Drive*)SOME_VALUE)-SOME_VALUE << endl; cout << (DWORD)static_cast<Base2*>((Drive*)SOME_VALUE)-SOME_VALUE << endl; cout << (DWORD)static_cast<Base3*>((Drive*)SOME_VALUE)-SOME_VALUE << endl; 他說會印出 0 4 8 但我無法理解為什麼印出048 而他印這些用意何在.... 以至於下面我也無法看下去 = = 煩請觀念好的板友們給點意見 我覺得這網頁看懂了可能會有點幫助 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.87.64.222

02/10 20:50, , 1F
想辦法弄一本 Inside the C++ Object Model 中文版來看會
02/10 20:50, 1F

02/10 20:50, , 2F
比較實在,是絕版書,原文版的圖比中文版差還很多問題。
02/10 20:50, 2F
文章代碼(AID): #1BSbUbrY (C_and_CPP)
文章代碼(AID): #1BSbUbrY (C_and_CPP)