有如下程序: #include<iostream> using namespace std; class ONE { public: virtual void f() { cout << "1"; }

admin2009-03-15  23

问题 有如下程序:
   #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。
转载请注明原文地址:https://kaotiyun.com/show/5sjp777K
0

最新回复(0)