如下多重集成的代碼:
1 class CTaurusMainDlg : public CDGClient,
2 public CDialog
3 {
4 DECLARE_DYNAMIC(CTaurusMainDlg)
5
6 public:
7 CTaurusMainDlg(CWnd* pParent = NULL); // 標(biāo)準(zhǔn)構(gòu)造函數(shù)
8 virtual ~CTaurusMainDlg();
9 。。。。。
CDGClient 類是一個從抽象類派生的類(有兩個抽象基類)。
當(dāng)在調(diào)試狀態(tài)下運行時,輸出窗口中出現(xiàn)一下信息:

轉(zhuǎn)到出錯地址 0x00ed65b5 :

圖中的匯編碼將 this 指針指向的四個字節(jié)內(nèi)容作為虛函數(shù)表地址(edx),驚異的發(fā)現(xiàn),虛函數(shù)表指針為零!有妖怪???
為了驗證匯編碼的結(jié)果,在 CTaurusMainDlg 的某一個窗口函數(shù)中設(shè)下斷點后,查看其成員:

如圖中所示,發(fā)現(xiàn)虛函數(shù)表指針果然為零!真的有妖怪???
但是將 CDialog 和 CDGClient 的順序交換則無此問題,如下:
1 class CTaurusMainDlg : public CDialog,
2 public CDGClient
3 {
4 DECLARE_DYNAMIC(CTaurusMainDlg)
5
6 public:
7 CTaurusMainDlg(CWnd* pParent = NULL); // 標(biāo)準(zhǔn)構(gòu)造函數(shù)
8 virtual ~CTaurusMainDlg();
9