2017-05-27 6 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; 
} 

Wenn das obige Programm läuft es gibt:Warum gibt mein C++ - Programm dies aus?

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

Ich bin neu in C++ und ich habe Schwierigkeiten, warum er druckt alle diese Zeilen aus. Ich würde denken, es würde nichts ausdrucken, da nur die onemorefunction Funktion aufgerufen wird und das wars. Jede Hilfe wird geschätzt. Vielen Dank!

+2

Der Destruktor wird immer aufgerufen, wenn die Lebensdauer eines Objekts endet. In diesem Fall endet die Lebensdauer des Objekts, wenn das Programm beendet wird. – UnholySheep

+0

* Was * Teil der Ausgabe ist schwer zu verstehen? Sie kennen den Lebenszyklus von Objekten und wie sie * konstruiert * und * zerstört * werden? –

+4

Das richtige Werkzeug, um solche Probleme zu lösen, ist Ihr Debugger. Sie sollten Schritt für Schritt durch Ihren Code * gehen, bevor Sie auf Stack Overflow nachfragen. Für weitere Hilfe lesen Sie bitte [Wie kleine Programme zu debuggen (von Eric Lippert)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Zumindest sollten Sie Ihre Frage so bearbeiten, dass sie ein [minimales, vollständiges und verifizierbares] (http://stackoverflow.com/help/mcve) Beispiel enthält, das Ihr Problem zusammen mit den Beobachtungen, die Sie im Debugger gemacht haben, reproduziert . –

Antwort

1

programming object; erstellt ein Objekt mit dem Namen object, dessen Typ programming ist. Das Erstellen eines Objekts ruft den Konstruktor auf. Deshalb erhalten Sie die ersten zwei Ausgabezeilen. Wenn das Objekt am abschließenden } am Ende main den Geltungsbereich verlässt, wird das Objekt zerstört, und das ruft den Destruktor auf. Deshalb erhalten Sie die letzten zwei Zeilen der Ausgabe. Und der Aufruf an onemorefunction druckt die mittlere Zeile, weil das der Code in der Funktion ist.

+0

Vielen Dank für die Schritt für Schritt durchgehen Ich verstehe es jetzt viel besser – kprog

1

Die Ausgabe des Programms, wie es sein soll, wird die letzten zwei Zeilen von Ausgang

In destructor 
Variable is 100 

gedruckt wird, weil der destructor am Ende aufgerufen, wenn der Lebenszyklus der Gegenstände endet.

Verwandte Themen