C++对象内存布局--⑩GCC编译器--虚拟继承--菱形继承
2010-08-20 01:24
597 查看
C++对象内存布局--⑩GCC编译器--虚拟继承--菱形继承
//GCC编译器--虚拟继承--菱形继承.cpp //2010.8.19 //GCC编译器 #include <iostream> using namespace std; //////////////////////////////////////////////////////////////// class Base { public: Base(int a = 10):a(a) { } virtual void show() { cout << "Base::show()" << "\t" << a << endl; } virtual void testA() { cout << "Base::testA()" << "\t" << a << endl; } private: int a; }; //////////////////////////////////////////////////////////////// class BaseA : virtual public Base { public: BaseA(int b = 20):b(b) { } virtual void showA() { cout << "BaseA::showA()" << "\t" << b << endl; } void testA() { cout << "BaseA::testA()" << "\t" << b << endl; } private: int b; }; //////////////////////////////////////////////////////////////// class BaseB : virtual public Base { public: BaseB(int c = 30):c(c) { } virtual void showB() { cout << "BaseB::showB()" << "\t" << c << endl; } private: int c; }; //////////////////////////////////////////////////////////////// class Derived : public BaseA, public BaseB { public: Derived(int d = 40):d(d) { } virtual void show() { cout << "Derived::show()" << "\t" << d << endl; } virtual void test() { cout << "Derived::test()" << "\t" << d << endl; } private: int d; }; //////////////////////////////////////////////////////////////// int main() { Derived obj; int** p = (int**)&obj; cout << "Derived obj 内存布局:" << endl; for (int i = 0; i != sizeof(obj)/4; ++i) { cout << p[i] << endl; } cout << endl; typedef void (*fun)(void*pThis);//非常重要 /*通过虚函数表调用函数*/ /*第一个虚函数表指针。BaseA*/ ((fun)(p[0][0]))(p); ((fun)(p[0][1]))(p);//头两个是BaseA的 ((fun)(p[0][2]))(p); ((fun)(p[0][3]))(p);//后两个是Derived的 /*第二个虚函数表指针。BaseB*/ cout << endl; ((fun)(p[2][0]))(p+2); /*第三个虚函数表指针。Base*/ cout << endl; ((fun)(p[5][0]))(p+5); ((fun)(p[5][1]))(p+5); return 0; } /* Derived obj 内存布局: 0x472d0c 0x14 0x472d28 0x1e 0x28 0x472d3c 0xa BaseA::showA() 20 BaseA::testA() 20 Derived::show() 40 Derived::test() 40 BaseB::showB() 30 Derived::show() 40 BaseA::testA() 20 */
相关文章推荐
- C++对象内存布局--⑩GCC编译器--虚拟继承--菱形继承
- C++对象内存布局--⑨VS编译器--虚拟继承--菱形继承
- 【C++】菱形虚拟继承(内存布局)
- C++对象内存布局--⑦VS编译器--虚拟继承多个基类
- C++对象内存布局--⑧GCC编译器--虚拟继承多个基类
- C++ 对象的内存布局(多重虚拟继承)
- 【C++】菱形虚拟继承对象模型分析
- C++对象内存布局-单一继承
- C++虚拟继承中_对象内存的分布_虚继承会多余分配虚表v-tab的指针vptr_图1-1清楚的描述了虚继承类对象内存的分布_转载淘宝共享数据平台
- c++虚继承对象的内存布局
- C++虚拟继承中对象内存的分布
- C++对象内存分布(3) - 菱形继承(virtual)
- 浅析GCC下C++多重继承 & 虚拟继承的对象内存布局
- c++中的单继承,多继承(此处着重讲菱形继承)的内存布局模型详解
- C++对象内存布局-多重继承
- C++对象内存分布(2) - 菱形继承(non virtual)
- C++对象内存分布(3) - 菱形继承(virtual)
- 浅析GCC下C++多重继承 & 虚拟继承的对象内存布局
- C++继承详解之三——菱形继承+虚继承内存对象模型详解vbptr(1)
- C++对象模型之内存布局三(虚继承)