当前位置:首页 > C+ + 程序设计(04737) > 正文内容

#include <iostream> using namespace std; class A { int a;

程序分析题:阅读程序后,填写程序的正确运行结果。 


#include <iostream>
using namespace std;
class A {
int a;
public:
A(int aa=0){a=aa;}
~A( ){cout <<″Destructor A!″<<a<<endl;}
};
class B:public A{
int b;
public:
B(int aa = 0,int bb = 0):A(aa){b = bb;}
~B( ){cout <<″Destructor B!″<< b << endl;}
};
void main( ){
B x(5),y(6,7);
}


【正确答案】:

DESTRUCTOR B! 7
DESTRUCTOR A! 6
DESTRUCTOR B! 0
DESTRUCTOR A! 5


【题目解析】:

为了对对象进行初始化,C++提供了一种称为构造函数的机制。而析构函数在对象的生存期结束时被自动调用。
在一般情况下,调用析构函数的次序正好与调用构造函数的次序相反:最先被调用的构造函数,其对应的析构函数最后被调用,而最后被调用的构造函数,其对应的析构函数最先被调用。

故本题中,先调用x(5),故先调用构造函数A,且x的第二个形参默认为0,也调用了构造函数B。

再调用y(6,7),故先调用构造函数A,再调用了构造函数B。

本题中,所以的输出都在析构函数中,所以调用析构函数的次序正好与调用构造函数的次序相反,输出应该为:B7、A6、B0、A5


扫描二维码免费使用微信小程序搜题/刷题/查看解析。

版权声明:本文由翰林刷题小程序授权发布,如需转载请注明出处。

本文链接:https://20230611.cn/post/243785.html