问题 单项选择题

有如下程序:
#include<iostream>
using namespace std;
class Base
public:
void funl( )cout<<"Base\n";
virtual void fun2( )cout<<"Base\n";

class Derived:public Base

public:
void funl( )eout<<"Derived\n";
void fun2( )cout<<"Derived\n";

void f(Base &B) b.funl( );b.fun2( );
int main( )
Derived obj;
f(obj);
return 0;

程序的输出结果是

A.Base
Base

B.Base
Derived

C.Derived
Base

D.Derived
Derived

答案

参考答案:B

解析: 函数f的形参为基类对象,在调用时可以用派生类的对象作为实参,但是该对象就被弱化为基类对象,故b.funl( )调用的是基类的funl( )函数,b.fun2( )调用的是被重新定义后的虚函数,所以打印的结果是DERVIED。

单项选择题
单项选择题