C++多继承内存模型

1.说明

C++允许多继承(区别于java,不能多继承,需要使用接口),但是C++的多继承也带来了 用户层面理解盲区(例如:内存布局等)

2.代码测试

实现一个基础的继承

class A{
public:
    int a;
    int b;
    virtual void function1()
    {
        cout<<"this is class A ,function1 !"<<endl;
    }
};

class B{
public:
    int a;
    int b;
    virtual void function2()
    {
        cout<<"this is class B, function2 !"<<endl;
    }
};

//class C extend A B
class C :public A, public B //1. 没有指明这个bulic 默认就是private继承
{
public:
    int a;
    int b;
    virtual void function3()
    {
        cout<<"this is calss C, function3 !"<<endl;
    }

    //Class C里面新增加一个新的虚函数,这个函数和其他函数关系
    virtual void function4()
    {
        cout<<"this is new virtual, before C obj is 40 !"<<endl;//这个虚函数的地址,是放到了A的虚函数表,还是B的虚函数表??
    }
};
3.直接看结果

  • 多继承C类,实例化后含有AB类中的成员变量(public的,注意private的也是占大小的)
  • 注意访问继承的成员变量
  • static成员变量在全局区!!