多重继承容易产生二义性,除显式指明调用会产生二义性的成员外,解决方法还可以使用虚基类。分析下在代码,分析几个类的继承情况,和虚基类的机制。
#include<iostream>
#include<string>
using namespace std;
class B
{ int a;
public:
B(int sa)
{ a=sa;
cout<<"Constructing B"<<endl;
}
void print_B()
{ cout<<"base class:a="<<a<<endl; }
};
class B1:virtual public B
{ int b;
public:
B1(int sa,int sb):B(sa)
{ b=sb;
cout<<"Constructing B1"<<endl;
}
void print_B1()
{ cout<<"B1 class:b="<<b<<endl; }
};
class B2:virtual public B
{ int c;
public:
B2(int sa,int sc):B(sa)
{c=sc;
cout<<"Constructing B2"<<endl;
}
void print_B2()
{ cout<<"B2 class:c="<<c<<endl; }
};
class D:public B1,public B2
{ int d;
public:
D(int sa,int sb,int sc,int sd):B(sa),B1(sa,sb),B2(sa,sc)
{ d=sd;
cout<<"Constructing d"<<endl;
}
void print_D()
{ cout<<"D class:d="<<d<<endl; }
};
int main()
{ D obj(2,4,6,8);
cout<<"**********************"<<endl;
obj.print_D();
obj.print_B();
obj.print_B1();
obj.print_B2();
system("pause");
return 0;
}