问题 单项选择题

有如下程序: #include <iostream> using namespace std; class AA { public:virtual void f(){ cout<< "AA";} }; class BB : public AA { public:BB(){ cout << "BB";} }; class CC : public BB { public:virtual void f(){ BB::f(); cout << "CC";} }; int main () {AA aa,*p; BB bb; CC cc;p=&cc;p->f ();return 0; } 执行上面的程序将输出( )。

A.AA

B.AABBCC

C.BBAABBCC

D.BBBBAACC

答案

参考答案:D

解析: 本题中,函数f()在基类AA中派生类CC中都声明为虚函数,所以采用动态联编。主函数首先定义类AA的对象aa和指针对象p,然后定义了类BB的对象bb,此时调用了类BB的构造函数输出BB。再定义类CC的对象cc,由于类CC是类BB的派生类,所以此时又调用类BB的构造函数输出BB。最后执行语句“p=&cc; p->f();”,输出AA和CC。

选择题
多项选择题