簡體   English   中英

不明白這個程序的輸出

[英]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;
}

這是輸出

HAMMER TOOL TAPE HAMMER WRENCH TAPE SHEVEL SWEEPER ~SWEEPER ~SHOVEL ~TAPE ~WRENCH ~HAMMER ~TAPE ~TOOL ~HAMMER

為什么 TAPE 沒有出現在 TOOL 之前? 同樣沒有出現在相反的第二位?

編輯:似乎除了這兩個之外,它完全按照從上到下的順序出現,然后又反過來

這是施工順序:

  • 清掃器構造函數開始
  • Sweeper 有父類 Tool -> Tool 構造函數開始
    • 工具有錘子 -> 打印 HAMMER
    • 工具構造函數完成 -> 打印工具
  • 清掃器構件的構造順序與書寫順序相同:膠帶、扳手、鏟子
    • 磁帶構造函數 -> 打印 TAPE
    • 扳手構造器開始
      • 扳手有錘子部件 -> 打印錘子
      • 扳手構造函數完成 -> 打印 WRENCH
    • 鏟子構造器開始
      • 鏟子有錘子部件 -> 打印錘子
      • Shovel 構造函數完成 -> 打印 SHOVEL
  • Sweeper 構造函數完成 -> 打印 SWEEPER

在銷毀過程中,對象以相反的順序銷毀。 但在這種情況下,析構函數體在銷毀成員之前執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM