C++對象記憶體布局–⑦VS編譯器–虛擬繼承多個基類

來源:互聯網
上載者:User

C++對象記憶體布局--⑦VS編譯器--虛擬繼承多個基類

 

//VS編譯器--虛擬繼承多個基類.cpp//2010.8.18//測試發現,如果衍生類別覆蓋了基類的虛函數那麼被覆蓋的虛基類虛函數表前面會有一個0值。//之前一直沒注意到發生重寫時會有“間隔”的問題。如要考慮上“間隔”,那麼又要複雜上許多。//這個“間隔”到底用意何在?是否是在多態的時候有所應用?//猜測可能是一標記。因為衍生類別重寫了虛基類的虛函數,而這個虛函數的地址又沒有放在衍生類別的虛函數表中,//而且虛擬繼承基類跟衍生類別執行個體的位置跟普通繼承是不同的。//VS編譯器#include <iostream>using namespace std;////////////////////////////////////////////////////class BaseA{public:        BaseA(int a = 10):a(a)        {        }virtual void f(){cout << "BaseA::f()" << "\t" << a << endl;}int a;};////////////////////////////////////////////////////class BaseB{public :        BaseB(int b = 20):b(b)        {        }virtual void f(){cout << "BaseB::f()" << "\t" << b << endl;}int b;};////////////////////////////////////////////////////class Derived :virtual public BaseA, virtual public BaseB{public:        Derived(int c = 100):c(c)        {        }void f(){cout << "Derived::f()" << "\t" << c << endl;}virtual void ff(){    cout << "Derived::ff()" << "\t" << c << endl;}int c;};////////////////////////////////////////////////////intmain(){Derived obj;int** p = (int**)&obj;cout << "sizeof = " << sizeof(obj) << endl;for (int i = 0; i != sizeof(obj)/4; ++i){    cout << p[i] << endl;}    typedef void (__thiscall *fun)(void*pThis);//非常重要/*通過虛函數表調用函數*/((fun)(p[0][0]))(p);//((fun)(p[0][1]))();錯誤((fun)(p[4][0]))(p+4);((fun)(p[7][0]))(p+7);system("pause");return 0;}/*sizeof = 360041C2000041C20400000064000000000041C1F80000000A000000000041C1F000000014Derived::ff()   100Derived::f()    100Derived::f()    100請按任意鍵繼續. . .*/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.