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

admin2012-01-20  33

问题 有如下程序:
   #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;
   }
   执行上面程序的输出是______。

选项

答案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”。
转载请注明原文地址:https://kaotiyun.com/show/fDVp777K
0

最新回复(0)