有如下程序: #include<iostream> using namespace std; class XX { protected: int k; public: XX(int n=5):k(n){}; ~XX() { cout<<"XX"; } vi

admin2016-10-28  18

问题 有如下程序:
#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;
return0;
}
执行上面的程序将输出(    )。

选项 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”。
转载请注明原文地址:https://kaotiyun.com/show/KONp777K
0

最新回复(0)