下列程序时类D代码段出现编译错误,原因是【 】。 #include<iostream. h> class A { public: A(char c){cout<<"A’s constructor."<<c<<endl

admin2010-06-06  23

问题 下列程序时类D代码段出现编译错误,原因是【 】。
   #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++中提供了虚基类来解决这个问题,但在实际开发中由于过于复杂而往往尽量避免使用。
转载请注明原文地址:https://kaotiyun.com/show/ogjp777K
0

最新回复(0)