不明白这个程序的输出
Don't understand the output of this program
这是即将举行的考试中过去试卷中的程序。我已经尝试编辑文件以查看会发生什么,但我仍然对为什么它以这种特定顺序打印感到困惑。
#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;
}
这是输出
锤子工具胶带 锤子扳手胶带 铲子清扫车 ~扫地机 ~扫地机 ~胶带 ~扳手 ~锤子 ~胶带 ~工具 ~锤子
为什么磁带没有出现在工具之前?同样没有反过来出现第二?
编辑:似乎除了这两个之外,它从上到下完全按顺序出现,然后再次反向出现
这是构造顺序:
- 清扫器构造函数开始
- 扫地机有父类工具 ->工具构造函数开始
- 工具有锤子构件->打印锤子
- 工具构造器完成 ->打印工具
- 清扫构件的构造顺序与书写顺序相同:胶带、扳手、铲子
- 磁带构造函数 -> 打印磁带
- 扳手构造器开始
- 扳手有锤子构件->打印锤子
- 扳手构造器完成 ->打印扳手
- 铲子构造器开始
- 铲子有锤子构件->印 锤子
- 铲构造器完成 -> 打印肖维尔
- 清扫器构造器完成 -> 打印扫地机
在销毁过程中,对象以相反的顺序销毁。但在这种情况下,析构函数体在摧毁成员之前被执行。
相关文章:
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 显示错误输出的简单数组排序程序
- 更改.cpp程序的输入文件中数据的位置会意外更改输出
- 如何从Windows应用程序输出到标准?
- 我写了一个C++程序来模拟Enigma机器.我没有得到输出
- 如何使用C++读取另一个程序中的源代码输出
- 为什么我的C++程序的程序集输出充满了 .ascii,没有汇编代码?
- 为什么这个程序的输出不如预期
- 在由Sublime文本3编译后在cmd上显示Java程序输出
- C++ 每次运行程序时我都会"nan"输出的问题
- 如何从 Win32 C++ 应用程序输出到父控制台窗口?
- 这是使用回溯的 nqueen 问题,但我使用了动态 2d 数组,我的程序编译良好,但不返回任何输出
- 而循环:简单的除法程序输出零,不明白为什么
- 如何在 html 页面中插入 cgi 应用程序的输出?
- C 中的输出程序无明显的原因是白色的
- C++:更改简单输出程序的字体
- C++ 简单的输入/输出程序 + 枚举器
- C++字母等效数字代码输出程序
- 编译输出程序集