2017-05-27 10 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++に新しいですし、私はそれがすべてのこれらの行を出力理由として困難を抱えています。私はonemorefunction関数だけが呼ばれているので、何も印刷しないと思うでしょう。どんな助けもありがとうございます。ありがとう!オブジェクトのライフサイクルが終了したときにデストラクタが最後に呼び出されているので、それがなければならないようにプログラムの出力である

+2

デストラクタは、オブジェクトのライフタイムが終了すると常に呼び出されます。この場合、 'オブジェクト'の寿命は、プログラム終了時に終了します。 – UnholySheep

+0

*出力の何が分かりにくいですか?あなたはオブジェクトのライフサイクルと、それらがどのように構築され、破壊されたかを知っていますか? –

+4

このような問題を解決する適切なツールは、デバッガです。スタックオーバーフローを尋ねる前に、コードを一行ずつ進める必要があります。詳しいヘルプは、[小さなプログラムをデバッグする方法(Eric Lippert)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を参照してください。少なくとも、問題を再現する[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の例と、デバッガでの観察結果を含めるように質問を編集する必要があります。 –

答えて

1

programming object;objectという名前のオブジェクトを作成します。タイプはprogrammingです。オブジェクトを作成すると、コンストラクターが呼び出されます。それで、最初の2行の出力を得るのです。オブジェクトがmainの最後の}の終了時にスコープから外れると、オブジェクトは破壊され、そのオブジェクトはデストラクタを呼び出します。そのため、最後の2行の出力を得るのです。 onemorefunctionを呼び出すと中間行が表示されます。なぜなら、これは関数内のコードが行うためです。

+0

ステップウォークスルーのおかげでありがとう – kprog

1

、出力

In destructor 
Variable is 100 

の最後の2行が印刷されます。

関連する問題