选择题   有如下程序:
    #include<iostream>
    using namespace std;
    class B{
    public:
      viriual void show(){cout<<'B';}
    };
    class D:public B{
    public:
      void show(){cout<<'D';}
    };
    void fun1(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:
    }
    程序的输出结果是______。
 
【正确答案】 C
【答案解析】本题考查的知识点是虚函数与多态性。在成员函数声明的前面加上virtual修饰,即把该函数声明为虚函数。在C++中,一个基类指针(或引用)可以用于指向它的派生类对象,而且通过这样的指针(或引用)调用虚函数时,被调用的是该指针(或引用)实际所指向的对象类的那个重定义版本。故本题最终输出结果为DBB。