问题 单项选择题

有如下程序:
#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。

多项选择题
填空题