首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不理解这个程序的输出

不理解这个程序的输出
EN

Stack Overflow用户
提问于 2020-01-16 07:44:57
回答 1查看 77关注 0票数 0

这是一个程序,从过去的论文在即将到来的考试。我试着编辑了一些文件,看看会发生什么,但我仍然不明白为什么它会按照特定的顺序打印。

代码语言:javascript
运行
复制
#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;
}

这是输出

锤子工具磁带锤式扳手铲扫机~铲运机~铲子~铲子~扳手~锤子~工具锤子

为什么磁带没有出现在工具前?同样的,在相反的情况下也不会出现第二位?

编辑:它似乎不是这两个,它似乎完全按照顺序从上到下,然后再反过来。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-16 07:55:12

这是建筑的顺序:

  • 清除器构造函数开始
  • 清除器有父类工具->工具构造函数开始
    • 工具有锤子成员->打印锤子
    • 工具构造器完成->打印

HAMMER

  • Wrench

  • 清除器成员的构造顺序与书写顺序相同:磁带、扳手、铲子、
  • 胶带构造器、->打印磁带、
  • wrench构造器开始,
    • Wrench有锤子成员-> prints、
    • 构造函数完成-> prints WRENCH

代码语言:javascript
运行
复制
- Shovel constructor begins  
    - Shovel has hammer member -> prints HAMMER
    - Shovel constructor finishes -> prints SHOVEL

  • 清除器构造器完成->打印清除器

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59764992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档