问题 填空题

下列程序时类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++中提供了虚基类来解决这个问题,但在实际开发中由于过于复杂而往往尽量避免使用。

阅读理解与欣赏
单项选择题 A1型题