2017-05-27 90 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 

的最后两行印刷,因为析构函数在端调用时对象的生命周期结束。