#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 b

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


#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


Top