问题 单项选择题

有如下程序#include using namespace std;class A{ public:virtual void func1(){cout<<"A1";}void func2(){cout<<"A2";}} ;class B:public A{ public:void func1(){cout<<"B1";}void func2(){cout<<"B2";} } ;int main(){A*P=new B;p->func1(); P->func2();return 0;}运行此程序,屏幕上将显示输出【 】

A.B1 B2

B.A1 A2

C.B1 A2

D.A1 B2

答案

参考答案:C

解析:在C++中,一个基类指针(或引用)可以用于指向它的派生类对象,而且通过这样的指针(或引用)调用虚函数时,被调用的是该指针(或引用)实际所指向的对象类的那个重定义版本。基类中的实函数也可以在派生类中重定义,但重定义的函数仍然是实函数。在实函数的情况下,通过基类指针(或引用)所调用的只能是基类的那个函数版本,无法调用到派生类中的重定义函数。

填空题
单项选择题