c++ 类的内存布局 菱形继承

菱形继承

  菱形继承的方法如下:

class A
{
public:
     A(int a)
        :ma(a) {}
public:
     int ma;
};
class B :public A
{
public:
     B(int b)
         :A(b),mb(b) {}
public:
     int mb;
}
class C :public A
{
public:
     C(int b)
         :A(b), mc(b) {}
public:
     int mc;
}
class D :public B, public C
{
public:
     D(int d)
         :B(d), C(d), md(d) {}
public:
     int md;
};

在这里插入图片描述
类D的内存布局如下:
在这里插入图片描述

加入虚继承
class A
{
public:
     A(int a)
         :ma(a) {}
public:
     int ma;
};
class B :public A
{
public:
     B(int b)
         :A(b),mb(b) {}
public:
     int mb;
};
class C :public A
{
public:
     C(int b)
         :A(b), mc(b) {}
public:
     int mc;
};
class E
{
public:
     E(int e)
         :me(e) {}
public:
     int me;
};
class D :public B,virtual public E ,public C
{
public:
     D(int d)
         :B(d), C(d), md(d) {}
public:
     int md;
};

在这里插入图片描述
可在命令窗口下,进入相应路径,使用cl ConsoleApplication5.cpp /d1reportSingleClassLayoutD 查看类D的内存布局,结果如下:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值