菱形继承
菱形继承的方法如下:
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的内存布局,结果如下:
转载请注明原文地址:https://ipadbbs.8miu.com/read-62791.html