有如下程序    #include <iostream>    using namespace std;    class A{    public:        virtual void funcl( ){ cout<<"A1"; }        v

admin2009-03-16  28

问题 有如下程序    #include <iostream>    using namespace std;    class A{    public:        virtual void funcl( ){ cout<<"A1"; }        void func2( ) { cout<<"A2";    };    class B:public A {    public:        void funcl( ){ 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

解析 本题考查的是虚函数的概念。在C++中,一个派生类的对象可以被它的任何一个基类的指针所指向(或被基类类型的引用所引用)。若基类和派生类中存在一模一样的成员函数,那么通过该基类指针(或引用)调用这样的成员函数,究竟是应该调用基类中的还是调用派生类中的呢?答案是:若这个成员函数被定义成虚函数,那么就调用派生类中的;否则会调用基类中的。本题是一个典型的例子,func1()是虚函数,func2()是一般成员函数,而且在派生类与基类中都存在两个这样的函数。在主函数中,语句A*p=new B;定义了一个基类的指针p,并让它指向一个派生类对象。所以通过该指针调用func1()时,运行的是派生类的版本,而通过该指针调用func2()运行的是基类的版本。所以,程序运行后将输出B1A2,应该选择C。
转载请注明原文地址:https://jikaoti.com/ti/8TW0FFFM
0

最新回复(0)