【问题标题】:Don't understand the output of this program不明白这个程序的输出
【发布时间】:2020-01-16 07:44:57
【问题描述】:

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

#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;
}

这是输出

HAMMER 工具 胶带 锤子 扳手 胶带 铲子 清扫器 ~SWEEPER ~铲子 ~TAPE ~WRENCH ~HAMMER ~TAPE ~TOOL ~HAMMER

为什么 TAPE 没有出现在 TOOL 之前?并且同样没有出现倒数第二?

编辑:除了这两个之外,它似乎完全按照从上到下的顺序出现,然后又反过来

【问题讨论】:

  • 请解释你为什么特别期待。
  • 已编辑,道歉。
  • 这种奇怪的格式。来自 Python 并拒绝适应 C++ 约定的人?
  • 不是我的代码,但无论如何他似乎都是顽固的类型。

标签: c++


【解决方案1】:

这是构造顺序:

  • Sweeper 构造函数开始
  • Sweeper 有父类 Tool -> 工具构造函数开始
    • 工具有锤子 -> 打印 HAMMER
    • 工具构造器完成 -> 打印工具
  • 清扫器构件的构造顺序与书写顺序相同:胶带、扳手、铲子
    • 磁带构造函数 -> 打印 TAPE
    • 扳手构造器开始
      • 扳手有锤子 -> 打印 HAMMER
      • 扳手构造完成 -> 打印 WRENCH
    • Shovel 构造函数开始
      • 铲子有锤子 -> 打印 HAMMER
      • Shovel 构造函数完成 -> 打印 SHOVEL
  • Sweeper 构造函数完成 -> 打印 SWEEPER

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

【讨论】:

  • 上完 SWEEPER 课后我就再也没有注意到这个工具了,求主帮助我。非常感谢你,现在很有意义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多