有如下程序:    #include<iostream>    using namespace std;    class Base    {      public:        void funl(){cout<<"Basea";}        v

admin2017-10-17  20

问题 有如下程序:    #include<iostream>    using namespace std;    class Base    {      public:        void funl(){cout<<"Basea";}        virtual void fun2(){tout<<"Base\n";}    };    class Derived:public Base     {       public:          void funl() {cout<<"Derived\n"; }          void fun2() {cout<<"Derived\n"; }    };    void f(Base& b) {b.funl(); b.fun2(); }    int main()    {       Derived obj;       f(obj);       return 0;    }    执行这个程序的输出结果是

选项 A、Base  Base
B、Base  Derived
C、Derived  Base
D、Derived  Derived

答案B

解析 本题考查的是虚函数的概念。在C++中,一个派生类的对象可以被它的任何一个基类的指针所指向(或被基类类型的引用所引用)。若基类和派生类中存在一模一样的成员函数,那么通过该基类指针(或引用)调用这样的成员函数,究竟是应该调用基类中的还是调用派生类中的呢?答案是:若这个成员函数被定义成虚函数,那么就调用派生类中的;否则会调用基类中的。本题是一个典型的例子,funl()是一般成员函数,fun2()是虚函数,而且在派生类与基类中都存在两个这样的函数。在f()函数中,形参b是一个基类的引用,它引用的是主函数中定义的派生类对象obi。所以在调用fun()时,运行的是基类的版本,而fun2()运行的是派生类的版本。故选项 B中的结果是正确的。
转载请注明原文地址:https://jikaoti.com/ti/MIt0FFFM
0

最新回复(0)