有如下程序; #inc1ude<iostream> using namespace std; class B{ public: virtual void show() {cout

admin2016-11-23  17

问题 有如下程序;
#inc1ude<iostream>
       using namespace std;
        class B{
public:
                       virtual void show() {cout<"B"; }
      };
              class D:public B {
public:
            void show() {cout<"D";}
              void funl(B *ptr) {ptr一>show();}
                   void fun2(B &ref) {ref.show();}
                        void fun3(B b) {b.show(); }
                int main() {
          B b,*p=new D;
           D d;
funl(p);
    fun2(b);
    fun3(d);
    return 0;
    }
    程序的输出结果是(     )。

选项 A、BBB
B、BBD
C、DBB
D、DBD

答案C

解析 此题考查的是虚函数与多态性。在成员函数的声明前面加上virual关键字,即可把函数声明为虚函数;在C++中,一个基类指针可以用于指向它的派生类对象,而且通过这样的指针调用虚函数时,被调用的是该指针实际所指向的对象类的那个重定义版本。此题中,funl()和fun20的形参分别是基类的指针和引用,给funl()传入的实参是指向派生类对象的指针p,funl()将调用D类中的show0输出字符‘D’;给fun2()出入的实参是基类对象,fun2()调用类B中的show0输出字符‘B’;fun3()由于形参是基类对象,调用的始终都是基类的show0,输出字符‘B’。故最终输出结果是DBB。
转载请注明原文地址:https://kaotiyun.com/show/OzAp777K
0

最新回复(0)