C++虚继承

我们在解决实际问题的时候,多继承和多重继承可能出现下面的情况

C++虚继承_第1张图片

这样就使得D中拥有两组A中一模一样的数据,这是不被允许的,为了解决这种情况,我们引入了虚继承

当没有虚继承的时候

#include
#include  
using namespace std;
class Person
{
public:
	Person(string color="pink")
	{
        m_strColor=color;
    	cout<<"Person()"<Farmer::printColor();
	p->Worker::printColor();
	delete p;
	p=NULL;
	system("pause");
	return 0;
}

C++虚继承_第2张图片

我们看到有两个m_strName的数据,一个是Farmeryellow,另一个是Workeryellow,这样是不被允许的

当引入虚继承

#include
#include  
using namespace std;
class Person
{
public:
	Person(string color="pink")
	{
        m_strColor=color;
    	cout<<"Person()"<Farmer::printColor();
	p->Worker::printColor();
	delete p;
	p=NULL;
	system("pause");
	return 0;
}

 

此时我们实例化MigrantWorker的时候只有一份Person的数据,但打印的是pink证明在这种菱形的继承关系中数据只是父类初始化时的默认值

C++虚继承_第3张图片

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