下列程序的运行结果是______。 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 vo

题目
下列程序的运行结果是______。 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这个重载的虚函数时,根据当前指向可确定调用子孙的同名虚函数。
更多“下列程序的运行结果是______。 include<iostream.h> class A { public: virtual void use( ) {cou ”相关问题
  • 第1题:

    下面程序的输出结果是includeclass A{public: A( ) {cout < < "construtA" < < end

    下面程序的输出结果是 #include<iostream.h> class A { public: A( ) {cout < < "construtA" < < endl;} Virtual~A( ) {cout < < "destructA" < < endl;}}; class B: public A { }; class C:public A { }; class D:public B,public C { }; void main( ) { D d;}

    A.constructA

    B.constructA

    C.constructA

    D.constructA destructA constructA constructA constructA destructA constructA constrnctA destructA destructA constructA destructA destructA destructA destrctA destructA destructA


    正确答案:B
    解析:类D继承了类C和类B,所以在构造的时候分别构造类B和类C。

  • 第2题:

    下列程序的运行结果为()。include void main(){int a=2;int b=a+1;cou<

    下列程序的运行结果为( )。 #include<iostream.h> void main() { int a=2; int b=a+1; cou<<afo<<endl; }

    A.0.66667

    B.0

    C.0.7

    D.0.66666666


    正确答案:B

  • 第3题:

    下列程序的运行结果是______。 include class Base { public: virtual void func(int

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

    include<iostream.h>

    class Base

    {

    public:

    virtual void func(int i){cout<<"class Base:"<<i<<end1;)

    };

    class Derived: public Base

    {

    public:

    void func(double d){cout<<"class Derived:"<<d<<endl;}

    };

    void main( )

    {

    Base a,*p=a;

    Derived b;

    p=&b;

    (*p).func(3.3);

    }


    正确答案:class Base:3
    class Base:3 解析:题中基类和派生类中有同名函数,但是参数不同。派生关系中,只有在函数类型、函数名和参数个数、参数类型完全相同时,才表现多态性。本题中参数不同,编译器便认为是两个完全不同的函数。通过基类的指针指向派生类对象时,该指针只能访问到派生类中具有多态性的成员函数,而与基类无关的函数是无法通过基类指针来访问的。故调用的是base类的 func函数,系统将3.3强制转化为整型数3。如果将派生类中的func的形参改为int型,则执行的就会是派生类的func函数,此时表现为多态。

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

    在下列基类的定义中,有无virtual修饰use成员函数的结果将不同,其原因是______。

    当use( )为虚拟函数时的程序执行结果:

    sizeof(A)=8

    sized(B)=12

    sizeof(C)=16

    当use( )非虚拟函数时的程序执行结果:

    sizeof(A)=4

    sized(B)=8

    sizeof(C)=12

    源程序如下:

    include<iostream.h>

    class Grandad

    {

    public:

    Grandad( ):money(10){}

    int money;

    virtual void use( ){}

    };

    class Father:public Grandad

    {

    public:

    Father( ):money(100){}

    int money;

    void use( ){}

    };

    class Son:public Father

    {

    public:

    Son( ):money(300){}

    int money;

    void use( ){}

    };

    void main(void)

    {

    Grandad A;Father B;Son C;

    cout<<"sizeof(A)="<<sizeof(A)<<endl;

    cout<<"sizeof(B)="<<sizeof(B)<<endl;

    cout<<"sizeof(C)="<<sizeof(C)<<endl;

    }


    正确答案:采用虚函数的每个派生类都含有一个指向虚函数表的指针故多4字节。
    采用虚函数的每个派生类都含有一个指向虚函数表的指针,故多4字节。