填空题 有如下程序:
#include<iostream>
using namespace std;
class A

public:
virtual void f()cout<<"1";
;
class B:public A

public:
B ()cout<<"2";
;
class C:public B

public:
virtual void f()B::f();cout<<"3";
;
int main()

A aa,*p;
B bb;
C cc;
p=&cc;
p->f();
return 0;

执行上面程序的输出是______。

  • 1、
【正确答案】 1、2213    
【答案解析】[解析] B bb将定义一个B型对象bb,这时需调用B的构造函数,在该构造函数中,将输出"2:;C cc将定义一个C型对象cc,这时需调用C的构造函数,面该函数为缺省构造函数,其将调用父类B的构造函数,在该构造函数中,将输出"2":由于p采用指针方式调用成员函数f,而f在基类中被声明为虚拟函数,故函数f的执行与指针p所指向对象的实际类型相一致,p指向一个C型对象cc,故执行p->f()时,将执行C的f函数,在该函数中,首先直接调用了父类B的函数f,而在B中直接继承了A类的f函数,故先要执行A的f函数,输出“1”,然后再输出“3”。