问题
单项选择题
有如下程序:
#include<iostream>
using namespace std;
class Base
private:
char c;
piblic:
Base(char n):c(n)
~Base()
cout<<C;
;
class DeriVed:public Base
private:
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++中,由于析构函数不能被继承,因此在执行派生类的析构函数时,基类的析构函数也将被调用。执行顺序是先执行派生类的析构函数,再执行基类的析构函数,其顺序与执行构造函数的顺序正好相反。在此题的程序中,在主函数main结束时,派生类Derived对象。obj将被删除,所以就会调用对象的析构函数。先调用派生类的析构函数,输出x,然后调用基类的析构函数,输出y。