有如下程序: #include using namespace std; classA { public: virtual void f(){cout

admin2013-05-30  51

问题 有如下程序:
    #include
    using namespace std;
    classA
    {
          public:
          virtual void f(){cout<<“1”;}
    };
    classB:publicA
    {
          public:
               B(){cout<<“2”;}
    };
    classC:publicB
    {
          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://jikaoti.com/ti/vbE0FFFM
0

最新回复(0)