class A{void P1(){cout<<"A111"};void P2(){cout<<"A222"};};class B:public A{void P1(){cout<<"B111"};virtual void P2(){cout<<"B222"};}..........A*cl=NULL;cl=new A;A->P1();A->P2();delete cl;cl=NULL;cl=new B;A->P1();A->P2();delete cl;cl=NULL;..........写出运行结果;

题目

class A{

void P1(){cout<<"A111"};

void P2(){cout<<"A222"};

};

class B:public A{

void P1(){cout<<"B111"};

virtual void P2(){cout<<"B222"};

}

..........

A*cl=NULL;

cl=new A;

A->P1();

A->P2();

delete cl;

cl=NULL;

cl=new B;

A->P1();

A->P2();

delete cl;

cl=NULL;

..........

写出运行结果;


相似考题
更多“class A{void P1(){cout"A111"};void P2(){cout"A222"};};class B:public A{void P1(){cout"B111"};virtual void P2(){cout"B222"};}..........A*cl=NULL;cl=new A;A-P1();A-P2();delete cl;cl=NULL;cl=new B;A-P1();A-P2();delete cl;cl=NULL;..........写出运行结果;”相关问题
  • 第1题:

    有如下程序include using namespace std;class A{public:virtual void func1 (){ cou

    有如下程序#include <iostream>using namespace std;class A{public:virtual void func1 (){ cout<<"A1"; }void func2(){ cout<<"A2"; }};class B: public A{public:void func l(){ cout<<"B1"; }void func2(){ cout<<"B2"; }};int main() {A *p=new B;p->func1();p->func2();return 0;}运行此程序,屏幕上将显示输出( )。

    A.B1B2

    B.A1A2

    C.B1A2

    D.A1B2


    正确答案:C

  • 第2题:

    下列程序的运行结果是______。 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这个重载的虚函数时,根据当前指向可确定调用子孙的同名虚函数。

  • 第3题:

    下面程序的运算结果是()。includeusing namespace std;class A{public:virtual void f

    下面程序的运算结果是( )。 #include<iostream> using namespace std; 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"<<" ";} }; void main() { A a, * p; B b;C c; p=&c; p->fun(); p=&b; }

    A.new file open file

    B.new file new file

    C.编译出错

    D.open file new file


    正确答案:C
    解析:语句Aa,*p;用抽象类说明了一个对象,这是不允许的。若把其改为A*p;则程序运行结果为D。

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

    有如下程序:

    #include<iostrealn>

    using namespace std

    class A{

    public:

    virtual void f(){cout<<1;}

    void g(){cout<<2;}

    };

    class B:public A{

    public:

    virtual void f(){cout<<3;}

    void g(){cout<<4;)

    };

    void show(A&A){a.f();a.g();}

    int main(){

    B b;

    show(B);

    return 0;

    }

    运行时的输出结果是

    A.12

    B.34

    C.14

    D.32


    正确答案:D
    解析:函数f( )是虚函数,函数g( )不是虚函数,因此当指向派生类的指针调用基类的对象时,会调用派生类的虚函数f( ),但还是会调用基类的成员函数g( ),因此会输出32。

  • 第6题:

    有如下程序:includeusing namespace std;class A{public:virtual void func1(){cout<

    有如下程序: #include<iostream> using namespace std; class A{ public: virtual void func1(){cout<<"A1";} void func2(){cout<<"A2";} }; class B:public A{ public: void func1(){cout<<"B1";} void func2(){cout<<"B2";} }; int main() { A *p=new B; p->func1(); p->func2(); return 0; } 执行该程序,屏幕上将显示输出( )。

    A.B1B2

    B.A1A2

    C.B1A2

    D.A1B2


    正确答案:C
    解析:程序中B为A的派生类,由主函数入手,主函数中定义了类A的指针p指向类B。根据基类中的“virtualvoidfunc1()”知道A中的func1为虚函数,执行“p->func1();”语句,通过指针变量调用此虚函数,此时调用的就是指针变量指向的同名函数,即派生类的func1函数,输出B1。而fun2不是虚函数,所以执行“p->func2();”输出为A2。

  • 第7题:

    使用VC6打开考生文件夹下的工程test16_1,此工程包含一个源程序文件test16_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果为:

    Which act(a or b)?b

    act1

    act2

    Bact3

    Bact4

    Bend

    源程序文件test16_1.cpp清单如下:

    include<iostream.h>

    class A

    {

    public:

    virtual void act1(){cout<<"actl\n";act2();}

    void act2(){cout<<"act2\n";act3();}

    /**********+****** found *****************/

    void act3(){cout<<"Aact3\n";act4();}

    /***************** found *****************/

    virtual void act4{cout<<"Aact4\n";act5();}

    void act5(){cout<<"Aend\n";}

    };

    class B:public A

    {

    void act3(){cout<<"Bact3\n";act4();}

    void act4() {cout<<"Bact4\n";act5() ;}

    void act5() {cout<<"Bend\n";}

    };

    void main (void)

    {

    char c;

    A *a;

    cout<<"Which act (a or b) ?";

    /***************** found *****************/

    cin<<c;

    if(c=='a')

    a = new A;

    else

    a = new B;

    a->act1 ( );

    delete a;

    }


    正确答案:(1)错误:voidact3(){cout"Aact3\n";act4();} 正确:virtual void act3(){cout"Aact3\n";act4();} (2)错误:virtual void act4{cout"Aact4\n";act5();} 正确:virtual void act4(){cout"Aact4\n";act5();} (3)错误:cinc; 正确:cin>>c;
    (1)错误:voidact3(){cout"Aact3\n";act4();} 正确:virtual void act3(){cout"Aact3\n";act4();} (2)错误:virtual void act4{cout"Aact4\n";act5();} 正确:virtual void act4(){cout"Aact4\n";act5();} (3)错误:cinc; 正确:cin>>c; 解析:(1)主要考查考生对于虚函数使用规则的理解,要实现对函数act3的动态联编应该使用虚函数,这样在本题中对于函数的调用才能实现根据不同对象调用不同函数;
    (2)主要考查考生对于函数定义的掌握,虽然参数表为空,但括号是不能省略的:
    (3)主要考查考生是否会使用流输入操作,本题中使用的是流输出符。

  • 第8题:

    下面程序输出的结果是【 】。 include using namespace std; class A { public:virtual

    下面程序输出的结果是【 】。

    include <iostream>

    using namespace std;

    class A {

    public:

    virtual void show() {cout<<"A!";

    };

    class B: public A {

    public:

    void show() {cout << "B!";}

    };

    class C: public B{

    public:

    void show(){cout << "C!";}

    };

    void show_info(A &i) {i. show();}

    void main() {

    A ia; B ib; C ic; show_info(ia);show_info(ib); show_info(ic); }


    正确答案:A! A! A!
    A! A! A! 解析:由于基类中没有声明虚函数,故调用的全部是基类的函数。

  • 第9题:

    下列程序的输出结果为2,请将程序补充完整。 include using namespaee std; class B

    下列程序的输出结果为2,请将程序补充完整。

    include <iostream>

    using namespaee std;

    class Base{

    public:

    ______void fun( ){cout<<1;}

    };

    class Derived:public Base{

    public:

    void fun( ){cout<<2;}

    };

    int main( ){

    Base*P=new Derived:

    p->fun( );

    delete P;

    return 0;

    }


    正确答案:virtual
    virtual 解析:在基类中的虚函数在派生类中被重新定义时,该函数仍然为虚函数,但是可以省略不写virtual关键字,在派生类对象中调用时,则调用被重新定义后的虚函数。

  • 第10题:

    下面程序的结果是 ______。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

  • 第11题:

    下面程序的输出结果是()。includeusing namespace std;void main(){char cl='a',c2='c

    下面程序的输出结果是( )。 #include<iostream> using namespace std; void main() { char cl='a',c2='c'; cout.put('a').put('c').put('\n'); cout.put(c1).put(c2); }

    A.ac a c

    B.ac ac

    C.a c ac c

    D.a c


    正确答案:B
    解析:分析该题,输出字符“a”,“c”和换行,然后再输出“a”,“c”。

  • 第12题:

    下列程序的运行结果是______。 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函数,此时表现为多态。

  • 第13题:

    下面程序的运行结果是 ______。includeclass A{public virtual、~(){cout<<”call A::

    下面程序的运行结果是 ______。 #include<iostream.h> class A{ public virtual、~(){ cout<<”call A:: ~A()”<<end1;} }; class B:public A{ B(int i){p=new char[i]:} -B(){ delete[)p; Cout<<”call B:: ~B()”; } }; void main() { A*a=new B(8); Delete a; }

    A.call B:: ~B()

    B.call B:: ~B()

    C.call A:~A()

    D.call A::~A()


    正确答案:A

  • 第14题:

    有如下程序:includeusing namespace std;class Base{public:void output( ){cout<

    有如下程序: #include<iostream> using namespace std; class Base{ public: void output( ){cout<<l;} virtual void Print( ){cout<<'B';} }; class Derived:public Base{ public: void output( ){cout<<1;} void Print( ){cout<<'D';} }; int main( ){ Base*prt=new Derived; prt->output( ); prt->Print( ); delete prt; return 0; } 程序的输出结果是

    A.1B

    B.1D

    C.2B

    D.2D


    正确答案:B
    解析:基类指针可以指向派生类对象,但是只能访问从基类中继承来的成员。派生类对从基类继承来的成员可以被重新定义。故打印1D

  • 第15题:

    下列程序的输出结果为2,请将程序补充完整。 include using namespace std; class Basc

    下列程序的输出结果为2,请将程序补充完整。

    include<iostream>

    using namespace std;

    class Basc

    {

    public:

    【 】void fun(){cout<<1;}

    };

    class Dcrived:public Base

    {

    public:

    void fun(){cout<<2;}

    };

    int main()

    {

    Base*p=new Derived;

    p->fun();

    delete p;

    return 0;

    }


    正确答案:virtual
    virtual 解析:利用虚函数实现多态。

  • 第16题:

    有如下程序: #inClude<iostream> using namespaCe std; Class Base{ publiC: void output{Cout<<1;} virtual void Print{Cout<<B’;} }; Class Derived:publiC Base{ publiC: void output{Cout<<2;} void Print{Cout<<’D ;} }; int main { Base * ptr=new Derived; ptr一>output; ptr一>Print; delete ptr; retum0; } 执行这个程序的输出结果是( )。

    A.1B

    B.lD

    C.2B

    D.2D


    正确答案:B
    在某基类中声明为vitua1并在一个或多个派生类中被重新定义的成员函数,本题中定义了一个指向派生类对象的基类指针ptr,执行ptr一>outpnt后,会执行基类的output函数,输出1,由于Print是虚函数,所以ptr->Print会执行派生类的Print,即输出D,所以本题答案为B。

  • 第17题:

    请阅读下述代码,写出程序执行的结果

    #include <iostream>

    using namespace std;

    class CBase

    {

    public:

    virtual void print()

    {

    cout<< "base" << endl;

    }

    void DoPrint()

    {

    print();

    }

    };

    class CChild1: public CBase

    {

    public:

    virtual void print()

    {

    cout<< "child1" << endl;

    }

    };

    class CChild2: pu

    {

    public:

    virtual void pri

    {

    cout<< "chil

    }

    };

    void DoPrint(CB

    {

    base->DoPrint

    }

    void main()

    {

    CBase* base =

    CChild1* child

    CChild2* child

    DoPrint(child1

    DoPrint(child2

    DoPrint(base);

    delete base;

    base = child1;

    base->print();

    delete child1;

    delete child2;

    }


    正确答案:

     

  • 第18题:

    写出下列程序代码运行的结果【】。 include class A{public:virtual void disp() {cout

    写出下列程序代码运行的结果【 】。

    include<iostream.h>

    class A{

    public:

    virtual void disp() {cout<<" calss A!" <<(end1;}

    }:

    class B: public A{

    public:

    void disp() {cout<<" class B! " <<end1:}

    };

    class C: public A{

    public:

    void disp() {cout<<"class C! " (<end1;}

    };

    void main() {

    A a, *ptr;

    B b;

    C c;

    a. disp();

    b. disp();

    c. disp();

    ptr=&b;

    ptr->disp();

    ptr=&c;

    ptr->disp():

    }


    正确答案:class A! class B! class C! class B! class C!
    class A! class B! class C! class B! class C!

  • 第19题:

    以下程序执行结果是 ( )。include class Base{public virtual void fun() {cout<<"B

    以下程序执行结果是 ( )。 #include <iostream.h> class Base { public virtual void fun() { cout<<"B"; } }; class Derived { public: Derived() { cout<<"D"; } virtual void fun(){ Base::fun(); cout<<"C"; } } int main () { Base *ptr; Derived obj; ptr=&obj; p->fun ( ); return 0; }

    A.DBC

    B.DCB

    C.BDC

    D.CBD


    正确答案:A
    解析:本题考核虚函数的应用。主函数中创建派生类Derived的对象。obj时,调用其构造函数首先输出字符'D'。然后调用fun()函数,由于派生Derived已对基类的虚函数fun()进行了重定义,所以语句“p->fun();”调用的是派生类中的函数fun(),即输出BC。所以答案为A选项。

  • 第20题:

    有以下程序:include using namespace std;class A{public: virtual void show() {cout

    有以下程序:

    include <iostream>

    using namespace std;

    class A

    {

    public:

    virtual void show()

    {

    cout<<"A";

    }

    };

    class B : public A

    {

    public:

    void show()

    {

    cout << "B";

    }

    };

    void display( A * obj )

    {

    obj-> show();

    }

    int main ( )

    {

    A demol;

    B demo2;

    display( & demol );

    display( & demo2 );

    return 0;

    }

    执行后的输出结果为【 】。


    正确答案:AB
    AB 解析:本题考核赋值兼容原则以及派生与继承的应用。题中函数display()形参类型为类A,执行语句“display(&demo1);”则输出A。执行语句“display(&dem02);”时,由于show()函数为虚函数,所以调用类B中show()函数,输出B。所以最后结果为AB。

  • 第21题:

    有如下程序:includeusing namespace std;class B{public:Virtual void show(){cout<<

    有如下程序: #include<iostream> using namespace std; class B{ public: Virtual void show(){cout<<“B”;} }; class D:publicB{ public: void show(){cout<<“D”;} }; void funl(B*ptr){ptr->show();} void{un2(B&ref){ref.show();} void

    A.BBB

    B.BBD

    C.DBB

    D.DBD


    正确答案:C
    解析: 本题考查的知识点是,虚函数与多态性。在成员函数声明的前面加上virtual修饰,即把该函数声明为虚函数。在C++中,一个基类指针(或引用)可以用于指向它的派生类对象,而且通过这样的指针(或引用)调用虚函数时,被调用的是该指针(或引用)实际所指向的对象类的那个重定义版本。故本题最终输出结果为DBB。

  • 第22题:

    有如下程序: #include<iostream> using namespace std; class A{ public: virtual void fancl{cout<<”Al”;} void func2{cout<<”A2”;} }; class B:public A{ public: void funcI{tout<<”Bl”;} void func2{tout<<”B2”;} }; intmain} A*P=new B: P—>funcl; P—>func2; delete p; return 0; } 执行这个程序的输出结果是( )。

    A.B182

    B.A1A2

    C.B1A2

    D.AIB2


    正确答案:C
    本题考查虚函数。虚函数指在基类中声明为virtual并在一个或多个派生类中被重新定义的成员函数。题中定义了一个派生类对象8,并使用类A的对象指针指向B,由于基类A中的funcl为虚函数,所以会执行派生类的funcl,输出Bl,而基类中的func2不是虚函数,所以P->func2会执行基类的func2,输出A2。故答案为c。

  • 第23题:

    下面程序的运行结果是()。includeusing namespace std;class A{public: virtual~A() {

    下面程序的运行结果是( )。 #include<iostream> using namespace std; class A { public: virtual~A() { cout<<"call A::~A()"<<endl;} }; class B:public A { char * p; public: B(int i) { p=new char[i];} ~B() { delete(p); cout<<"call B::~B()"; } }; void main() { A * a=new B(8); delete a; }

    A.call B::~B()call A::~A()

    B.call B::~B()

    C.call A::~A()

    D.call A::~A()call B::~B()


    正确答案:A
    解析:本题考查虚函数的使用,通过基类指针指向派生类的对象,从而动态地访问派生类对象中的虚函数。本题若没有把A类中的析构函数说明为virtual,则答案为C。