2017-05-27 87 views
-3
#include <iostream> 
using namespace std; 

class programming { 
protected: int variable; 
public: 
      programming() { 
        cout << "In constructor\n"; 
        input_value(); 
      } 

      ~programming() { 
        cout << "In destructor\n"; 
        output_value(); 
      } 

      void input_value() { 
        cout << "In function input_value\n"; 
        variable = 100; 
      } 

      void output_value() { 
        cout<< "Variable is "<< variable << "\n"; 
      } 

      void onemorefunction() { 
        if(variable%2) { 
          cout << "Variable is odd\n"; 
        } 
        else cout << "Variable is even\n"; 
      } 
}; 

int main(int argc, char *argv[]) { 
     programming object; 
     object.onemorefunction(); 
     return 0; 
} 

當上述程序運行它輸出:爲什麼我的C++程序輸出這個?

 
In constructor 
In function input_value 
Variable is even 
In destructor 
Variable is 100 

我新的C++和我有困難,爲什麼它打印所有這些線路出來。我認爲它不會打印任何東西,因爲只有一個多功能函數被調用,就是這樣。任何幫助表示讚賞。謝謝!

+2

析構函數總是在對象的生存期結束時調用。在這種情況下,當程序終止時,'object's的生命期結束。 – UnholySheep

+0

*部分輸出很難理解?你確實知道對象的生命週期,以及它們是如何被構造和被破壞的? –

+4

解決這些問題的正確工具是您的調試器。在*堆棧溢出問題之前,您應該逐行執行您的代碼。如需更多幫助,請閱讀[如何調試小程序(由Eric Lippert撰寫)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。至少,你應該[編輯]你的問題,以包含一個[Minimal,Complete,and Verifiable](http://stackoverflow.com/help/mcve)例子來重現你的問題,以及你在調試器中所做的觀察。 –

回答

1

programming object;創建一個名爲object的對象,其類型爲programming。創建一個對象調用構造函數。這就是爲什麼你得到前兩行輸出。當對象在main末尾}處超出範圍時,對象將被銷燬,並調用析構函數。這就是爲什麼你會得到最後兩行輸出。並且打電話給onemorefunction打印中間行,因爲這是函數中的代碼所做的。

+0

謝謝你的一步一步走過我明白現在好多了 – kprog

1

程序的輸出是理所應當的,輸出

In destructor 
Variable is 100 

的最後兩行印刷,因爲析構函數在端調用時對象的生命週期結束。