下列程序运行后的输出结果是( )。#includeusing namespace std;class A{public:void f() { coutvirtual void g() { cout};class B : public A {public:void f() { coutvirtual void g() { cout};void show(A& a) {A. f();A. g();}int main() {B b;show(b);return 0;}A. 13B.14C.23D.24

题目

下列程序运行后的输出结果是( )。

#include

using namespace std;

class A{

public:

void f() { cout<<1; }

virtual void g() { cout<<2; }

};

class B : public A {

public:

void f() { cout<<3; }

virtual void g() { cout<<4; }

};

void show(A& a) {

A. f();

A. g();

}

int main() {

B b;

show(b);

return 0;

}

A. 13

B.14

C.23

D.24


相似考题
参考答案和解析
参考答案:B
更多“下列程序运行后的输出结果是( )。#includeusing namespace std;class A{public:void f() { cou ”相关问题
  • 第1题:

    下列程序的运行结果是______。 include class A { public: virtual void use( ) {cou

    下列程序的运行结果是______。

    include<iostream.h>

    class A

    {

    public:

    virtual void use( ) {cout<<"in A\n";}

    };

    class B:public A

    {

    public:

    virtual void use( ) {cout<<"in B\n";}

    };

    class C:public B

    {

    public:

    virtual void use( ){cout<<"in C\n";}

    };

    void main( )

    {

    A*obj;

    bj=new C;

    obj->use( );

    delete obj;

    }


    正确答案:in C
    in C 解析:本题考查虚函数和多态性。原本obj指向祖先类,随后被赋值,指向新的子孙类,则在使用use这个重载的虚函数时,根据当前指向可确定调用子孙的同名虚函数。

  • 第2题:

    有如下程序: inClude using namespace std; class AA { public: viltual void f() { c

    有如下程序:

    inClude<iostream>

    using namespace std;

    class AA

    {

    public:

    viltual void f()

    {

    cout<<"AA";

    }

    };

    class BB:public AA

    {

    public:

    BB()

    {

    cout<<"BB";

    }

    };

    class CC:public BB

    {

    public:

    virtual void f()

    {

    BB::f();

    cout<<"CC";

    }

    };

    int main()

    {

    AA aa,*p;BB bb;CC cc;

    p=&cc;

    p->f();

    return 0;

    }

    运行后的输出结果【 】。


    正确答案:BBBBAACC
    BBBBAACC 解析:本题考核虚函数。本题中,函数f()在基类AA中派生类CC中都声明为虚函数,所以采用动态联编。主函数首先定义类AA的对象aa和指针对象p,然后定义了类BB的对象bb,此时调用了类BB的构造函数输出BB。再定义类CC的对象cc,由于类CC是类BB的派生类,所以此时又调用类BB的构造函数输出BB。最后执行语句“p=&cc;p->f();”,输出AA和CC。

  • 第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题:

    下列程序的运行结果是______。include class Base { public: void f(int x){cout<<“B

    下列程序的运行结果是______。

    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)

    {

    Base*pd=ne


    正确答案:Base:97。
    Base:97。 解析: 本题主要考查两个知识点,一是基类指针可以指向派生类对象,并可以访问派生类的所有成员。二是在函数重载中进行隐式类型转换。如pd->f(‘a’);系统到底调用哪个重载函数呢?实参既不是派生类中的形参,也不是基类中f函数的形参类型。此时系统根据就近原则和从高优先级到低优先级的规则尝试隐式转换。单字符更接近整数,故调用的是基类的f函数。

  • 第5题:

    若有以下程序:includeusingnamespaceStd;classsample{ inti;publiC: sample(){} void

    若有以下程序: #include <iostream> using namespace Std; class sample { int i; publiC: sample(){} void setvalue(int m) { i=m; } void fun(int m) { i+=m; } void disp() { cout<<i<<end1; } }; int main() { sample *ps; ps=new sample; ps->setvalue(20); ps->fun(5); ps->disp(); return 0; } 程序运行后,输出的结果是( )。

    A.15

    B.20

    C.25

    D.30


    正确答案:C
    解析:本题考核对象指针的应用。程序首先定义了一个类sample,其中包含一个私有成员i和3个公有成员函数。函数setvalue()的功能是给私有成员i赋值,函数fun()的功能是将私有成员i的值增加5,函数disp()的功能是输出变量i的值。在主函数中,先定义了类sample的一个对象指针ps,并申请了一块内存空间。执行语句ps->setvalue(20);后,类中i的值为20,执行语句ps->fun(5);后,类中i的值为25。所以程序最后输出25。