#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
今日推荐
周排行