虚继承主要解决多继承中出现变量访问不明确的问题;
解决方法:
1.用类名+::来解决;
2.虚继承;
#include <iostream>
using namespace std;
class A
{
public:
int num;
A()
{
num=100;
cout<<"A"<<endl;
}
~A()
{
cout<<"~A"<<endl;
}
};
class B:virtual public A //虚继承
{
public:
B()
{
cout<<"B"<<endl;
}
~B()
{
cout<<"~B"<<endl;
}
};
class C:virtual public A //虚继承
{
public:
C()
{
cout<<"C"<<endl;
}
~C()
{
cout<<"~C"<<endl;
}
};
class D:public B,public C
{
public:
D()
{
cout<<"D"<<endl;
}
~D()
{
cout<<"~D"<<endl;
}
};
int main()
{
D d;
//cout<<d.num<<endl;//error:访问不明确;没加virtual前;
//第一种方案:清楚的表明作用域,以免出现歧义:
//cout<<d.B::num<<endl;
//cout<<d.C::num<<endl;
//第二种方案:加上virtual后,就没有歧义了,B和C都指向同一份A;
cout<<d.num<<endl;//加上virtual OK
system("pause");
return 0;
}
虚继承主要解决的就是访问不明确的问题!