不明白这个程序的输出

Don't understand the output of this program

本文关键字:输出 程序 明白      更新时间:2023-10-16

这是即将举行的考试中过去试卷中的程序。我已经尝试编辑文件以查看会发生什么,但我仍然对为什么它以这种特定顺序打印感到困惑。

#include <iostream>
using namespace std;
class HAMMER
{
public:
HAMMER() {cout << " HAMMER";}
virtual ~HAMMER() { cout << " ~HAMMER "; }
};
class TAPE
{
public:
TAPE(){cout << " TAPE "; }
virtual ~TAPE() { cout << " ~TAPE"; }
};
class TOOL
{
public:
TOOL(){cout << " TOOL "; }
virtual ~TOOL() { cout << " ~TOOL"; }
protected:
HAMMER hammer;
};
class WRENCH
{
public:
WRENCH(){cout << " WRENCH "; }
virtual ~WRENCH() { cout << " ~WRENCH"; }
protected:
HAMMER hammer;
};
class SHOVEL
{
public:
SHOVEL(){cout << " SHOVEL "; }
virtual ~SHOVEL() { cout << " ~SHOVEL"; }
protected:
TAPE dog;
};
class SWEEPER: public TOOL
{
public:
SWEEPER(){cout << " SWEEPER "; };
virtual ~SWEEPER(){ cout << " ~SWEEPER " ; };
protected:
TAPE dog;
WRENCH wrench;
SHOVEL shovel;
};
int main() 
{
SWEEPER b;
}

这是输出

锤子工具胶带 锤子扳手胶带 铲子清扫车 ~扫地机 ~

扫地机 ~胶带 ~扳手 ~锤子 ~胶带 ~工具 ~锤子

为什么磁带没有出现在工具之前?同样没有反过来出现第二?

编辑:似乎除了这两个之外,它从上到下完全按顺序出现,然后再次反向出现

这是构造顺序:

  • 清扫器构造函数开始
  • 扫地机有父类工具 ->工具构造函数开始
    • 工具有锤子构件->打印锤子
    • 工具构造器完成 ->打印工具
  • 清扫构件的构造顺序与书写顺序相同:胶带、扳手、铲子
    • 磁带构造函数 -> 打印磁带
    • 扳手构造器开始
      • 扳手有锤子构件->打印锤子
      • 扳手构造器完成 ->打印扳手
    • 铲子构造器开始
      • 铲子有锤子构件->印
      • 锤子
      • 铲构造器完成 -> 打印肖维尔
  • 清扫器构造器完成 -> 打印扫地机

在销毁过程中,对象以相反的顺序销毁。但在这种情况下,析构函数体在摧毁成员之前被执行。