问题 单项选择题

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

解析: 类YY公有派生于类XX,派生类对象可以替代基类对象向基类对象的引用进行赋值初始化,XX&p=*new YY语句定义了XX对象p引用,并用YY对象初始化,p并不是YY对象的别名,是XX基类对象的别名,故先调用基类XX的构造函数将k初始化为5,p.f()首先输出k-3即2,然后调用XX::f()输出k+3即8,delete&p删除p,调用XX的析构函数输出“XX”。

判断题
单项选择题