注射用曲妥珠单抗价格:一个c++选择题

来源:百度文库 编辑:高考问答 时间:2024/04/28 08:49:52
有如下程序:
#include
class BASE{
char c;
public:
BASE(char n):c(n){}
virtual~BASE(){cout<<C;}
};
class DERIVED:public BASE{
char c;
public:
DERIVED(char n):BASE(n+1),c(n){}
~DERIVED(){cout<<C;}
};
int main()
{ DERIVED("X");
return 0;
}
执行上面的程序将输出()
A)XY B)YX C)X D)Y

为何答案为A
从何处输出?
cout<<C 就可以输出字符x或y了么?是因为调用了c(n)函数?
我怎么看也不知道为什么会输出。输出的顺序倒是搞得清的

输出是由析构函数完成的。
DERIVED("X")首先调用基类构造函数将基类的成员c赋值'Y',然后将该类的成员c赋值'X',然后是执行该类的构造函数体。这个语句生成一个临时的DERIVED对象。然后到main()函数结尾,对象生命期结束,调用析构函数。调用析构函数的顺序和调用构造函数顺序相反。即先调用DERIVED析构函数,输出'X',然后调用基类析构函数输出'Y'