问题 单项选择题

有如下程序:   #include   usingnamespacestd;   classB{   public:   virtualvoidshow(){cout<<"B";}};   classD:publicB{   public:   voidshow(){cout<<"D";}   };   voidfun1(B*ptr){ptr->show();   }voidfun2(B&ref){ref.show();   }voidfun3(BB){b.show();   }   intmain(){   Bb,*p=newD;   Dd;   funl(p);   fun2(b);   fun3(d);   return0;   }   程序的输出结果是(  )。

A.BBB

B.BBD

C.DBB

D.DBD

答案

参考答案:C

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

单项选择题
单项选择题