我对以下类进行了编码,以测试多级继承概念。有一点我在尝试测试对构造函数和析构函数的调用时并不十分了解。
#include <iostream>
using namespace std;
class X{
public:
X(){cout <<"Construct X " << endl;};
virtual ~X(){cout <<"Destruct X " << endl;};
virtual void print() const = 0;
};
class Y: public X{
public:
Y(){cout <<"construct Y " << endl;};
~Y(){cout <<"Destruct Y " << endl;};
void print() const{
cout <<"print Y" << endl;
};
};
class Z: public Y{
public:
Z(){cout <<"Construct Z" << endl; };
~Z(){cout <<"Destruct Z " << endl; };
void print() const{
cout <<" Print Z" << endl;
};
};
int main()
{
Y y;
//Why isn't Y being destructed in here
Z z;
return 0;
}
输出如下。我知道我们是从基层开始的。因此,在Y y;
第一个X的构造函数被调用,那么ÿ。在Z z;
第一个X的结构被调用,那么ÿ终于ž。
Construct X
construct Y
Construct X
construct Y
Construct Z
Destruct Z
Destruct Y
Destruct X
Destruct Y
Destruct X
为什么不立即调用Y的析构函数Y y;
。为什么我们要等到Z构造好之后再调用析构函数。意思是为什么输出看起来不是这样:
Construct X
construct Y
Destruct Y
Destruct X
Construct X
construct Y
Construct Z
Destruct Z
Destruct Y
Destruct X
继承在这里是一条红鲱鱼。没关系
y
并z
具有自动存储时间,在这种情况下,必须保持作用范围,直到该功能的大括号为止。
并且z
会被破坏之前 y
。(在其他所有条件相同的情况下,自动变量会按照创建它们的相反顺序超出范围。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句