菱形继承
菱形继承的方法如下:
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的内存布局,结果如下: