单选题
有如下程序: #include<iostream> using namespace std; class B{ public: virtual void f(){cout<<''B'';} void g(){cout<<''B'';} }; class D:public B{ public: void f(){cout<<''D'';} void g(){cout<<''D'';} }; void h(B*p){ p->f();p->g();} int main(){ D obj; h(&obj); return 0; } 运行这个程序的输出结果是( )。
【正确答案】
D
【答案解析】解析:在基类B中定义虚函数f()和成员函数g(),而在派生类D中定义了函数f()和同名函数g()。而函数h中的形参为指向基类的指针变量p,所以在主函数中执行h(&obj)时,会调用派生类的函数f(),输出D,再调用基类的函数g(),输出B。