问题 填空题

有如下程序: #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; } 执行上面程序的输出是 【11】

答案

参考答案: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。

读图填空题
单项选择题