有如下程序:
#include<iostream>
using namespace std;
class ONE
public:
virtual void f() cout << "1";
;
class TWO: public ONE
public:
TWO() cout << "2";
;
class THREE: public TWO
public:
virtual void f() TWO::f(); cout << "3";
;
int main()
ONE aa, *p;
TWO bb;
THREE cc;
p = &cc;
P->f();
return 0;
执行上面程序的输出是______
参考答案:2213
解析: 本题考查了派生类的构造和虚函数的运用。在主函数中,首先定义了一个ONE类的一个对象aa和一个指针p。然后定义一个TWO类的对象bb,此时TWO类的默认构造函数会被执行,输出一个“2”。接下来又定义了一个THREE类的对象 cc,因为THREE类是TWO类的派生类,所以会调用TWO类的构造函数,再输出一个“2”。然后让p指向对象cc。最后通过ONE类指针p调用THREE类对象cc的成员函数f(),因为f()函数是虚函数,所以调用的是THREE类中的f()函数。在该函数中,首先通过作用域运算符“::”调用TWO类中的f()函数,而TWO类自身没有定义该函数,但它从ONE类中继承了一个,所以该步实际调用的是ONE类中的 f()函数,输出一个“1”,最后返回到THREE类的f()函数中,输出一个“3”结束调用,返同主函数,整个程序运行结束。故最终输出的结果是:2213。