虚继承的实现细节就是在继承类的时候只继承一个构造函数


#include <iostream>
using namespace std;


class B
{
public:
	B()//构造函数
	{
		cout<<"B构造函数执行\n";
	}
	int b;
protected:
private:

};

class B1 : virtual public B //12
{
public:
	int b1;

};

class B2 :   virtual  public B //8
{
public:
	int b2;
};

class C : public B1, public B2
{
public:
	int c;
};

void main()
{

	C  c1;
	c1.b1 = 100;
	c1.b2 = 200;
	c1.c = 300;

	//c1.b = 500; //继承的二义性 和 虚继承解决方案
	//c1.B1::b = 500;
	//c1.B2::b = 500;


	cout<<"hello..."<<endl;
	system("pause");
	return ;
}
/*
在VC++6.0中的结果是:
---------------------------------------------
虚继承的解决方案就是在继承原始B类的构造函数时
只执行一次的构造函数,
(可以尝试去掉virtual关键字来看一下构造函数执行了几次)

去掉virtual后B类的构造函数执行了两次,加上之后值执行1次

---------------------------------------------
*/

猜你喜欢

转载自blog.csdn.net/baixiaolong1993/article/details/89205722