[問題] virtual function 的疑惑1
昨天問一些問題可能扯到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
02/10 20:50, 1F
→
02/10 20:50, , 2F
02/10 20:50, 2F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):