下列程序时类D代码段出现编译错误,原因是 【14】 。
#include<iostream. h>
class A
public:
A(char c)cout<<"A’s constructor."<<c<<endl;
~A()cout<<"A’s destructor."<<endl;
;
class B: virtual public A
public:
B(char cb,char cd):A(cb) cout<<"B’s constructor."<<cd<<endl;
~B()cout<<"B’s destructor."<<endl;
private:
char b;
;
class C:virtual public A
public:
C(char cc, char cd):A(cc)
cout<<"C’s constructor. "<<cd<<endl;
~C()cout<<"C’s destructor."<<endl;
;
class D:public B,public C
public:
D(char cd,char ce,char cf, char cg, char ch,char ci)
:C(cf,cg),B(cd,ce),A(cd),aa(ch)
cout<<"D’s constructor."<<ci<<endl;
~D() cout<<"D’s destructor."<<endl;
private:
A aa;
;
void main()
D ohj(’a’,’b’,’c’,’d’,’e’,’f’)
参考答案:类的继承出现二义性
解析: 本题就是通过实例来表现多继承时出现的二义性问题。多重继承比较复杂,尽管C++中提供了虚基类来解决这个问题,但在实际开发中由于过于复杂而往往尽量避免使用。