菱形继承二义性解决方法--虚拟继承

//虚拟继承是为了解决多重继承而出现的,比如
/*
			A
		   / \
          B   C
	       \ /
		    D
如果直接
class A{};
class B : public A{}
class C : public A{}
class D : public B, public C{}
那么在创建D的对象时候,将会生成2个A对象,1个B对象,1个C对象

如果采用虚拟继承
class A{};
class B : public virtual A{}
class C : public virtual A{}
class D : public B, public C{}
那么在创建D的对象时候,将会生成2个A对象,1个B对象,1个C对象
			
测试代码如下
*/
#include 
using namespace std;

class A
{
public:
	A(){cout << "A constructor"<

普通继承内存分布

菱形继承二义性解决方法--虚拟继承_第1张图片

使用虚拟继承的内存分布

菱形继承二义性解决方法--虚拟继承_第2张图片

你可能感兴趣的:(C/C++)