问题
单项选择题
有如下程序:
#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。