问题 单项选择题

有如下程序: #include <iostream> using namespace std; class XX { protected:int k; public:XX(int n=5):k(n){}~XX(){ cout<<"XX";}virtual void f() const=0; }; inline void XX::f()const {cout<<k+3; } class YY : public XX { public:~YY(){ cout<<"YY";}void f() const{ cout<<k-3; XX::f();} }; int main() {XX &p=* new YY;p.f();delete &p;return 0; } 执行上面的程序将输出( )。

A.28XX

B.28YYXX

C.-33XX

D.-33XXYY

答案

参考答案:A

解析: 本题中,&p是一个对象指针,通过使用new运算符变成了指向派生类 YY的对象指针。所以当建立并初始化对象指针&p时,程序将调用基类XX的构造函数,给私有数据成员k赋值5。然后调用派生类YY的常成员函数f(),输出值2和8。最后调用基类XX的析构函数输出XX。

单项选择题
填空题