问题 单项选择题

有以下程序:
#include <iostream>
using namespace std;
class BASE

private:
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 obj(’X’);
return 0;

执行上面的程序将输出( )。

A.XY

B.YX

C.X

D.Y

答案

参考答案:A

解析: 在C++中,由于析构函数不能被继承,因此在执行派生类的析构函数时,基类的析构函数也将被调用。执行顺序是先执行派生类的析构函数,再执行基类的析构函数,其顺序与执行构造函数的顺序正好相反。在此题的程序中,在主函数结束时,派生类DERIVED对象obj将被删除,所以就会调用对象的析构函数。先调用派生类的析构函数,输出X,然后调用基类的析构函数,输出Y。

问答题 案例分析题
单项选择题