问题
单项选择题
有如下程序:
#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。