我不明白房间和时钟构造函数是如何被称为
调用邮局构造函数的顺序构造函数和析构函数。
#include <iostream>
using namespace std;
class Clock{
int HH, MM;
public :
Clock():HH(0), MM(0){
cout<<"Constructor Clock "<<endl;
}
Clock(int hh,int mm): HH(hh), MM(mm){
cout<<"constructor clock at "<<hh<<mm<<endl;
}
~Clock(){
cout<<"Destructor Clock"<<endl;
}
};
class Room{
Clock clock;
public:
Room(){
cout<<"Constructor room"<<endl;
}
~Room(){
cout<<"Destructor room"<<endl;
}
};
class Postoffice{
Clock clock;
Room room;
public:
Postoffice(){
clock=Clock(18,30);
cout<<"Constructor postoffice"<<endl;
}
~Postoffice(){
cout<<"Destructor postoffice"<<endl;
}
};
int main(){
Postoffice p;
return 0;
}
以下是p
初始化过程中的事件顺序:
Postoffice::Postoffice()
。在进入函数体之前,Postoffice
的所有成员的初始化式按照声明的顺序运行。Clock::Clock()
初始化Postoffice::clock
。 调用Room::Room()
。类似于1。成员变量被调用,导致Clock::Clock()
为Room::clock
运行。Room::Room()
运行。Postoffice::Postoffice()
运行,clock=Clock(18,30);
执行。这首先创建一个临时的Clock
对象,并将其分配给Postoffice::clock
。在这个表达式的末尾,临时Clock
对象被销毁(Clock::~Clock()
调用)。- 打印自
Postoffice::Postoffice()
.
在main
函数结束时,p
超出作用域,导致:
- 析构函数体
Postoffice::~Postoffice()
运行 - 在析构函数体完成后,
Postoffice
的成员变量按相反顺序被销毁,导致Room::~Room()
的体运行。 - 程序体完成后,为
Room::clock
运行析构函数Clock::~Clock()
- 随着
Postoffice::room
的破坏完成,Postoffice::clock
被破坏运行Clock::~Clock()
。