下列程序时类D代码段出现编译错误,原因是【 】。 include class A { public:A(char c)下列程序时类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(

题目
下列程序时类D代码段出现编译错误,原因是【 】。 include class A { public:A(char c)

下列程序时类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++中提供了虚基类来解决这个问题,但在实际开发中由于过于复杂而往往尽量避免使用。
更多“下列程序时类D代码段出现编译错误,原因是【 】。 include<iostream. h> class A { public:A(char c) ”相关问题
  • 第1题:

    下列程序段的输出结果为( )。 include main() { static char a[]="language"; char *p;

    下列程序段的输出结果为( )。 #include<stdio.h> main() { static char a[]="language"; char *p; p=a; for(p=a;p<a+8;p+=2) putchar(*p); }

    A.language

    B.lnug

    C.有语法错误

    D.lang


    正确答案:B
    解析:本程序首先定义了静态字符数组a,然后将指针P指向数组a的首地址。第1次for循环,p=a,p指向数组的第1个元素,*p是取指针P所指地址的内容,输出1;第2次for循环,p=p+2,则p指向数组的第3个元素,*p是取指针p所指地址的内容,输出n;第3次for循环,p=p+2,则p指向数组的第5个元素,*p是取指针p所指地址的内容,输出u;第4次for循环,p=p+2,则p指向数组的第7个元素,*p是取指针p所指地址的内容,输出g,结束循环。

  • 第2题:

    下面程序的结果是 ______。includeclass A{ public:virtual voidfun()=0{};};class

    下面程序的结果是 ______。 #include<iostream.h> class A{ public: virtual void fun()=0{}; }; class B:public A{ public: void fun () {cout<< "new file" ;} }; class C: public A{ public: void fun (){cout<<"open file"<< " " } }; class D: public A{ public: void fun () {cout<< "save file\n" ;} }; void main() { A a,*p; B b; C c; D d; p=&c; p->fun (); p=&b; p->fun (); p=&d; p->fun(); }

    A.new file open file save file

    B.new file new file new file

    C.编译出错

    D.open file new file save file


    正确答案:C

  • 第3题:

    阅读下列说明和C++代码,填写程序中的空(1)~(6),将解答写入答题纸的对应栏内。
    【说明】
    以下C++代码实现一个简单绘图工具,绘制不同形状以及不同颜色的图形。部分类及其关系如图6-1所示。



    【C++代码】
    #include?#include?using?namespace?std;class?DrawCircle?{??????//绘制圆形,抽象类? ? ? public: (1);//定义参数为?int?radius,?int?x,?inty? ?virtual~DrawCircle()?{?}};class?RedCircle:public?DrawCircle?{????//绘制红色圆形? ? ? ? public: void?drawCircle(intradius,?int?x,?int?y)?{cout?<?drawCircle?=?drawCircle;? }? ?virtual~shape()?{?}? public:? ?virtual?void?draw()?=?0;};class?Circle:public?Shape?{????//圆形? ? private:? ? ?int?x,y,radius;? ? public:? Circle(int?x,inty,int?radius,DrawCircle?*drawCircle)? (3)? {? this->x?=?x;? ?this->y?=?y;? ? this->radius?=?radius; }? ? ? public:? void?draw(){? drawCircle?-> (4); }};int?main(){Shape?*redCirclenew?Circle(100,100,10,????(5)????);//绘制红色圆形? Shape?*greenCircle=new?Circle(100,100,10, (6)??);//绘制绿色圆形redCircle >draw();? ?greenCircle?->draw();? ?return?0;}


    答案:
    解析:
    (6)(1)void drawCircle (int radius,int x,int y)
    (2)DrawCircle*drawCircle
    (3)drawcircle
    (4)drawCircle(radius,x,y)
    (5)new RedCircle()
    (6)new GreenCircle()【解析】
    第一空是填接口里面的方法,在接口的实现里面找,可以发现应该填void drawCircle (int radius,int x,int y)。
    第二空可以根据后面this drawCircle=drawCircle判断,这里应该有一个drawCircle属性,因此应该填)DrawCircle drawCircle。
    第三空这里填drawcircle,用-> drawcircle来引用父类的成员。
    第四空调用drawCircle(radius,x,y)方法。
    第五、六空分别创建一个红色圆形对象和一个绿色圆形对象作为Circle里面的实参。

  • 第4题:

    下列程序编译时发现pb->f(10);语句出现错误,其原因是______。 include class Base {

    下列程序编译时发现pb->f(10);语句出现错误,其原因是______。

    include<iostream.h>

    class Base

    {

    public:

    void f(int x){cout<<"Base:"<<x<<endl;)

    };

    class Derived:public Base

    {

    public:

    void f(char*str){cout<<"Derived:"<<str<<endl;}

    };

    void main(void)

    {

    Derived*pd=new Derived;

    Pd->f(10);

    }


    正确答案:数据类型不匹配
    数据类型不匹配 解析:pd为派生类Derived的指针,指向派生类的成员函数f(char*Str),不指向基类的f(intx)。

  • 第5题:

    如下程序编译时发生错误,错误的原因是show函数实现语句错误,则正确的语句应该为______。

    include<iostream.h>

    class test

    {

    private:

    int hum;

    public:

    test(int);

    void show( );

    };

    test::test(int n){num=n;}

    test::show( ){cout<<num<<endl;}

    void main( )

    {

    test T(10):

    T.show( );

    }


    正确答案:void test::show( ){coutnumendl;}
    void test::show( ){coutnumendl;} 解析:show成员函数的声明和实现不一致,即实现部分应有void修饰符,这样才能编译通过。