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

轉到出錯地址 0x00ed65b5 :

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

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