【C++语法实践】09-C++ 虚基类表指针

钻石继承实例代码

#include <iostream>
using namespace std;

class BB
{
public:
    int bb_;
};

class B1 : virtual public BB
{
public:
    int b1_;
};

class B2 : virtual public BB
{
public:
    int b2_;
};

class CC : public B1, public B2
{
public:
    int cc_;
};

int main()
{

    return 0;
}

内存模型

在代码中定义一个B1 b1;对象是,会在编译阶段分配相应的内存,b1的第一个部分存放的虚基类表指针,虚基类表指针指向虚基类表。虚基类表中存放着2个数据成员,1. 本类地址与虚基类表指针地址的差 2.虚基类地址与虚基类指针地址的差。(一般来讲,C++编译器会将虚基类数据成员放在一个对象内存的最后)。通过指针访问虚基类成员的时候,根据虚基类表中的存放数据得出偏移量,访问继承得到的虚基类成员。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部