问题 单项选择题

有以下程序:
#include <iostream>
using namespace std;
class Base

public:
Base()
virtual void who()

cout<<"Base Class"<<end1;

~Base()
;
class Derivel : public Base

public:
void who()

cout<<"Derivel Class"<<end1;

;
class Derive2 : public Base

public:
void who ()

cout<<"Derive2 Class"<<end1;

;
int main ()

Base *p;
Derivel obj1;
Derive2 obj2;
p=&obj1;
p=&obj2;
p->who ( );
return 0;

执行程序后的输出结果是( )。

A.Base Class

B.Derivel Class

C.Derive2 Class

D.程序编译时出错

答案

参考答案:C

解析: 本题考核虚函数的应用。本题中,先定义了一个基类Base,它含有一个虚成员函数who(),随后定义的类Derivel和Derive2都是基类Base的公有派生类。在主函数中定义了一个指向Base类的指针,它也被允许指向其派生类。在执行过程中,不断改变它所指向的对象,p->who就能调用不同的函数实现。这是因为使用了虚函数,因而进行动态联编。
程序最后把指针p指向派生类Derive2的对象,由于函数who()在基类Base中是虚函数,所以系统调用Derive2中的who()函数,最后输出Derive2Class。

单项选择题
单项选择题