填空题 下列程序时类D代码段出现编译错误,原因是{{U}} 【14】 {{/U}}。 #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') }
  • 1、
【正确答案】 1、类的继承出现二义性    
【答案解析】[解析] 本题就是通过实例来表现多继承时出现的二义性问题。多重继承比较复杂,尽管C++中提供了虚基类来解决这个问题,但在实际开发中由于过于复杂而往往尽量避免使用。