一、前言
个人笔记,不保证严谨和正确☺,如有错误还望指出!
二、单虚继承Base1
只有一层继承关系且为虚继承,只是用于测试,实际工作中不会这么样。
2.1 类定义
class Base
{
public:
long long ibase;
Base ():ibase (10) {}
virtual void f() { cout << "Base::f()" << endl; }
virtual void g() { cout << "Base::g()" << endl; }
virtual void h() { cout << "Base::h()" << endl; }
};
class Base1 : virtual public Base
{
public:
long long ibase1;
Base1 ():ibase1 (100) {}
virtual void f() { cout << "Base1::f()" << endl; }
virtual void b1_1() { cout << "Base1::b1_1()" << endl; }
virtual void b1_2() { cout << "Base1::b1_2()" << endl; }
virtual void b1_3() { cout << "Base1::b1_3()" << endl; }
};
2.2 类图
2.3 内存布局
2.4 测试, 64位,G++ 4.6.4版本
// 测试 Base1
void test1()
{
typedef void(*ptrType)(void);
Base1 b;
ptrType pFun = NULL;
ptrType** pVtab = (ptrType**)&b;
cout << ">>>>>>sizeof(Base1): " << sizeof(Base1) << endl;
int index = 0; // 对象内存访问下标
auto fun = [&](string strName, int maxj)
{
cout << "[" << index << "] " << strName <<"::vptr->" << endl;
for (int j = 0; j < maxj; ++j)
{
pFun = (ptrType)pVtab[index][j];
cout << " [" << j <<"] ";
pFun();
}