Teilen über


Erstellen eines Konsolenrechners in C++

Der übliche Ausgangspunkt für einen C++-Programmierer ist eine Anwendung "Hello, world!", die auf der Befehlszeile ausgeführt wird. Sie beginnen damit in diesem Artikel, und fahren Sie dann mit einer schwierigeren Aufgabe fort: einer Rechner-App.

Voraussetzungen

  • Visual Studio mit der installierten und auf Ihrem Computer ausgeführten Workload Desktopentwicklung mit C++. Informationen zum Installieren finden Sie unter Installieren der C++-Unterstützung in Visual Studio.
  • In diesem Lernprogramm wird ein Feature namens "Edit and Continue" veranschaulicht, mit dem Sie Änderungen an Ihrem Code vornehmen können, während die App ausgeführt wird. Um die Bearbeitung zu aktivieren und fortzufahren, wählen Sie im Hauptmenü "Extras>Optionen>Debuggen>Allgemein " aus, und stellen Sie sicher, dass Quelldateien genau mit der ursprünglichen Version übereinstimmen müssen.

Erstellen Ihres App-Projekts

Visual Studio verwendet Projekte zum Organisieren des Codes für eine App und Lösungen zum Organisieren eines oder mehrerer Projekte. Ein Projekt enthält alle Optionen, Konfigurationen und Regeln, die zum Erstellen einer App verwendet werden. Außerdem wird die Beziehung zwischen allen Projektdateien und externen Dateien verwaltet. Um Ihre App zu erstellen, erstellen Sie zuerst ein neues Projekt und eine neue Lösung.

  1. Visual Studio starten – das Visual Studio-Startdialogfeld wird angezeigt. Wählen Sie "Neues Projekt erstellen " aus, um zu beginnen.

    Screenshot des Dialogfelds, das angezeigt wird, wenn Visual Studio 2022 gestartet wird.

    Das Dialogfeld bietet Optionen zum Klonen eines Repositorys, Öffnen eines Projekts oder einer Projektmappe, Öffnen eines lokalen Ordners und Erstellen eines neuen Projekts."

  2. Legen Sie im Dialogfeld " Neues Projekt erstellen" das Dropdownmenü "Sprache" auf C++ fest, legen Sie die Plattformdropdownliste auf Windows fest, wählen Sie "Konsolen-App " aus der Liste der Projekttypen und dann "Weiter" aus.

    Screenshot des Dialogfelds

    Die Dropdownliste für die Sprache ist auf C++ festgelegt, die Plattformdropdownliste ist auf Windows festgelegt, und Projekttypen wie leeres Projekt, Konsolen-App, CMake-Projekt, Windows-Desktop-Assistent usw. werden in der Liste der Projekttypen angezeigt."

    Von Bedeutung

    Stellen Sie sicher, dass Sie die C++-Version der Konsolen-App-Vorlage auswählen. Es enthält die C++-, Windows- und Konsolentags, und das Symbol hat "++" in der Ecke.

  3. Wählen Sie im Dialogfeld " Neues Projekt konfigurieren " das Textfeld "Projektname " aus, benennen Sie den neuen ProjektrechnerTutorial, und wählen Sie dann "Erstellen" aus.

    Screenshot des Dialogfelds

    Es wird eine leere C++-Windows-Konsolenanwendung "Hello World" erstellt. Konsolenanwendungen verwenden ein Windows-Konsolenfenster, um die Ausgabe anzuzeigen und Benutzereingaben zu akzeptieren. In Visual Studio wird ein Editorfenster geöffnet und zeigt den generierten Code an:

    // CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there.
    //
    
    #include <iostream>
    
    int main()
    {
        std::cout << "Hello World!\n";
    }
    
    // Run program: Ctrl + F5 or Debug > Start Without Debugging menu
    // Debug program: F5 or Debug > Start Debugging menu
    
    // Tips for Getting Started:
    //   1. Use the Solution Explorer window to add/manage files
    //   2. Use the Team Explorer window to connect to source control
    //   3. Use the Output window to see build output and other messages
    //   4. Use the Error List window to view errors
    //   5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project
    //   6. In the future, to open this project again, go to File > Open > Project and select the .sln file
    

Überprüfen, ob Ihre neue App erstellt und ausgeführt wird

Die Vorlage für eine neue Windows-Konsolenanwendung erstellt eine einfache C++-App "Hello World". An diesem Punkt können Sie sehen, wie Visual Studio die von Ihnen erstellten Apps direkt aus der IDE erstellt und ausführt.

  1. Um Ihr Projekt zu erstellen, wählen Sie im Menü "Build" die Option "Build Solution" aus. Das Ausgabefenster zeigt die Ergebnisse des Buildprozesses an.

    Screenshot des Visual Studio-Ausgabefensters. Es wird eine Meldung angezeigt, dass der Build erfolgreich war.

  2. Wenn Sie den Code ausführen möchten, wählen Sie auf der Menüleiste " Debuggen>starten" ohne Debugging aus (STRG+F5).

    Screenshot der Visual Studio-Debugkonsole mit der Ausgabe der Anwendung: Hello World!

    Ein Konsolenfenster wird geöffnet, und Ihre App wird darin ausgeführt.

    Wenn Sie eine Konsolen-App in Visual Studio starten, wird Ihr Code ausgeführt, und dann wird "Drücken Sie eine beliebige Taste, um dieses Fenster zu schließen. . ." um Ihnen die Möglichkeit zu geben, die Ausgabe zu sehen.

    Glückwunsch! Sie haben Ihre erste Konsolen-App "Hello, world!" in Visual Studio erstellt!

  3. Drücken Sie eine Taste, um das Konsolenfenster zu schließen und zu Visual Studio zurückzukehren.

Sie verfügen jetzt über die Tools zum Erstellen und Ausführen Ihrer App nach jeder Änderung, um sicherzustellen, dass der Code weiterhin wie erwartet funktioniert. Später zeigen wir Ihnen, wie Sie es debuggen, wenn dies nicht der Fehler ist.

Bearbeiten des Codes

Jetzt modifizieren wir den Code dieser Vorlage, um sie in eine Rechner-App zu verwandeln.

  1. Ersetzen Sie den Inhalt der CalculatorTutorial.cpp Datei durch den folgenden Code, damit er diesem Beispiel entspricht:

    // CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there.
    //
    
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        cout << "Calculator Console Application" << endl << endl;
        cout << "Please enter the operation to perform. Format: a+b | a-b | a*b | a/b"
            << endl;
        return 0;
    }
    
    // Run program: Ctrl + F5 or Debug > Start Without Debugging menu
    // Debug program: F5 or Debug > Start Debugging menu
    // Tips for Getting Started:
    //   1. Use the Solution Explorer window to add/manage files
    //   2. Use the Team Explorer window to connect to source control
    //   3. Use the Output window to see build output and other messages
    //   4. Use the Error List window to view errors
    //   5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project
    //   6. In the future, to open this project again, go to File > Open > Project and select the .sln file
    

    Grundlegendes zum Code:

    • Die #include Anweisung importiert Code aus anderen Dateien. Manchmal sehen Sie möglicherweise einen Dateinamen in spitzen Klammern wie <iostream>. Die winkeligen Klammern weisen den Compiler an, zuerst in den Standardsystemverzeichnissen nach der iostream Headerdatei zu suchen, und wenn nicht gefunden, in Verzeichnissen zu suchen, die für das Projekt spezifisch sind. In anderen Zeiten wird möglicherweise ein Dateiname umgeben von Anführungszeichen wie "someHeader.h". Die Anführungszeichen weisen den Compiler an, die Suche in den Standardsystemverzeichnissen zu überspringen und stattdessen nur in Verzeichnissen zu suchen, die für das Projekt spezifisch sind.
    • Der using namespace std; teilt dem Compiler mit, dass Code aus der C++-Standardbibliothek in dieser Datei verwendet werden soll. Ohne diese Zeile müsste jedem Schlüsselwort aus der Bibliothek vorangestellt std:: werden, um den Bereich zu kennzeichnen. Ohne diese Zeile würde beispielsweise jeder Bezug auf cout als std::cout geschrieben werden. Die using Anweisung wird hinzugefügt, um den Zugriff auf Code in einem anderen Namespace zu erleichtern.
    • Das cout Schlüsselwort wird verwendet, um die Standardausgabe in C++ zu drucken. Der << Operator weist den Compiler an, alles, was rechts davon ist, an die Standardausgabe zu senden.
    • Das endl Schlüsselwort ist wie die EINGABETASTE; es beendet die Zeile und bewegt den Cursor zur nächsten Zeile. Es ist eine bessere Praxis, innerhalb der Zeichenfolge (enthalten in \n) ein "" zu platzieren, um dasselbe zu erreichen, da endl immer den Puffer leert, was die Leistung des Programms verlangsamen kann. Da dies jedoch eine sehr kleine App ist, endl wird stattdessen verwendet.
    • Alle C++-Anweisungen müssen mit Semikolons enden, und alle C++-Anwendungen müssen eine main() Funktion enthalten. Diese Funktion ist das, was das Programm am Anfang ausführt. Der gesamte Code muss von main() aus zugänglich sein, damit er verwendet werden kann.
  2. Um die Datei zu speichern, drücken Sie STRG+S, oder wählen Sie auf der Symbolleiste unter der Menüleiste das Diskettensymbol aus.

  3. Um die Anwendung auszuführen, drücken Sie STRG+F5 , oder wechseln Sie zum Menü "Debuggen ", und wählen Sie "Ohne Debuggen starten" aus. Es sollte ein Konsolenfenster angezeigt werden, das wie folgt aussieht.

  4. Schließen Sie das Konsolenfenster, wenn Sie fertig sind.

Hinzufügen von Code zum Ausführen einiger Mathematischer Berechnungen

Eine Klasse ist wie eine Blaupause für ein Objekt, das etwas tut. In diesem Fall definieren wir eine Rechnerklasse, die die mathematische Logik enthält.

Hinzufügen einer Rechnerklasse

  1. Wechseln Sie zum Menü "Projekt ", und wählen Sie "Klasse hinzufügen" aus. Geben Sie im Bearbeitungsfeld KlassennameRechner ein. Wählen Sie OK aus.

    Screenshot des Dialogfelds

    Das Feld "Klassenname" enthält den Textrechner. Das H-Dateifeld enthält "Calculator.h". Das .cpp Dateifeld enthält Calculator.cpp. Das Basisklassenfeld ist leer. Die Optionen für "Inline" und "Verwaltet" sind deaktiviert.

    Ihrem Projekt werden zwei neue Dateien hinzugefügt. Wenn Sie alle geänderten Dateien gleichzeitig speichern möchten, drücken Sie STRG+UMSCHALT+S. Es ist eine Tastenkombination für "Datei>Alle speichern". Es gibt auch eine Symbolleistenschaltfläche für "Alle speichern", ein Symbol von zwei Disketten, die neben der Schaltfläche " Speichern " zu finden sind. Im Allgemeinen empfiehlt es sich, " Alle speichern" häufig zu erledigen, sodass Sie keine Änderungen verpassen.

    Der Assistent zum Klasse hinzufügen erstellt .h und .cpp Dateien mit demselben Namen wie die Klasse. Im Projektmappen-Explorer-Fenster können Sie eine vollständige Liste Ihrer Projektdateien sehen, die am Rand der IDE sichtbar ist. Wenn das Fenster nicht sichtbar ist, öffnen Sie es über die Menüleiste unter Ansicht>Projektmappen-Explorer.

    Screenshot des Visual Studio-Projektmappen-Explorer-Fensters.

    Das Rechner-Tutorial-Projekt verfügt über einen Headerdateien-Knoten mit Calculator.h. Ein Knoten "Quelldateien" enthält Calculator.cpp und CalculatorTutorial.cpp. Knoten für Verweise, externe Abhängigkeiten und Ressourcendateien sind sichtbar, aber geschlossen.

    Sie können eine Datei öffnen, indem Sie im Projektmappen-Explorer-Fenster darauf doppelklicken. Doppelklicken Sie Calculator.h , um sie zu öffnen.

  2. Ersetzen Sie den Inhalt von Calculator.h mit dem folgenden Code, sodass die Datei jetzt so aussieht.

    #pragma once
    class Calculator
    {
    public:
        double Calculate(double x, char oper, double y);
    };
    

    Grundlegendes zum Code

    • Dieser Code deklariert eine neue Funktion, die mathematische CalculateVorgänge für Addition, Subtraktion, Multiplikation und Division behandelt.
    • C++-Code ist in Headerdateien () und .h (.cpp) angeordnet. Einige andere Dateierweiterungen werden von verschiedenen Compilern unterstützt, aber dies sind die wichtigsten, die Sie kennen sollten. Funktionen und Variablen werden normalerweise deklariert, das heißt, dass sie einen Namen und einen Typ in Header-Dateien bekommen, und implementiert oder in Quell-Dateien definiert werden. Um auf code zuzugreifen, der in einer anderen Datei definiert ist, können Sie verwenden #include "filename.h", wobei filename.h der Name der Datei ist, die die Variablen oder Funktionen deklariert, die Sie verwenden möchten.
    • Es empfiehlt sich, Ihren Code basierend auf ihrer Funktionsweise in verschiedene Dateien zu organisieren, sodass sie den code, den Sie später benötigen, ganz einfach finden. In unserem Fall definieren wir die Calculator Klasse getrennt von der Datei, die die main() Funktion enthält, aber wir planen, auf die Calculator Klasse zu verweisen in main().
  3. Eine grüne Wellenlinie erscheint unter Calculate, da die Calculate Funktion zwar deklariert wird, sie aber nicht definiert ist. Bewegen Sie den Mauszeiger über Calculate, klicken Sie auf den Pfeil nach unten am Schraubenziehersymbol, und wählen Sie 'Calculate' in Calculator.cpp definieren erstellen aus.

    Screenshot einer Schraubzieher-Dropdownliste im Visual Studio-Editorfenster. Die Option

    Dieser Code wird hinzugefügt zu Calculator.cpp:

    Screenshot des Visual Studio-Editors mit der Definition der Funktion

    Die Definition der Funktion lautet: double Calculator::Calculate( double x, char oper, double y) { return 0,0; }

    Derzeit wird nur 0,0 zurückgegeben. Das ändern wir jetzt.

  4. Wechseln Sie im Editorfenster zur Calculator.cpp Datei. Ersetzen Sie den Inhalt von Calculator::Calculate(double x, char oper, double y) durch:

    double Calculator::Calculate(double x, char oper, double y)
    {
        switch(oper)
        {
            case '+':
                return x + y;
            case '-':
                return x - y;
            case '*':
                return x * y;
            case '/':
                return x / y;
            default:
                return 0.0;
        }
    }
    

    Grundlegendes zum Code

    • Die Funktion Calculate verwendet eine Zahl, einen Operator und eine zweite Zahl. Anschließend führt sie den angeforderten Vorgang für die beiden Nummern aus.
    • Die switch Anweisung überprüft, welcher Operator bereitgestellt wurde, und führt den Fall aus, der diesem Vorgang entspricht. Der default: Fall ist ein Fallback, falls der Benutzer einen Operator eingibt, der von keiner der vorherigen case Anweisungen behandelt wird. Es empfiehlt sich, ungültige Benutzereingaben eleganter zu behandeln, dies liegt jedoch außerhalb des Umfangs dieses Lernprogramms.
    • Das double Schlüsselwort zeigt einen Zahlentyp an, der Dezimalstellen unterstützt. Dieser Zahlentyp wird als Gleitkommazahl bezeichnet und double bedeutet eine Gleitkommazahl mit zusätzlicher Genauigkeit. Auf diese Weise kann der Rechner sowohl Dezimalmathematik als auch Ganzzahlmathematik verarbeiten. Die Calculate Funktion ist erforderlich, um immer eine Gleitkommazahl mit doppelter Genauigkeit aufgrund des double Codeanfangs zurückzugeben (dies bezeichnet den Rückgabetyp der Funktion), weshalb im Standardfall 0,0 zurückgegeben wird.
    • Die .h Datei deklariert den Funktionsprototyp, der dem Compiler vorab angibt, welche Parameter erforderlich sind, und welche Rückgabetyp davon erwartet werden soll. Die .cpp Datei enthält alle Implementierungsdetails der Funktion.

Wenn Sie den Code zu diesem Zeitpunkt erstellen und erneut ausführen, wird er sofort beendet, nachdem Sie gefragt haben, welcher Vorgang ausgeführt werden soll. Ändern Sie also die main Funktion so, dass mehrere Berechnungen ausgeführt werden.

Rufen Sie die Calculator Klassenmitgliedsfunktionen auf

  1. Aktualisieren Sie die Funktion in main wie folgt:

    // CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there.
    //
    
    #include <iostream>
    #include "Calculator.h"
    
    using namespace std;
    
    int main()
    {
        double x = 0.0;
        double y = 0.0;
        double result = 0.0;
        char oper = '+';
    
        cout << "Calculator Console Application" << endl << endl;
        cout << "Please enter the operation to perform. Format: a+b | a-b | a*b | a/b"
             << endl;
    
        Calculator c;
        while (true)
        {
            cin >> x >> oper >> y;
            result = c.Calculate(x, oper, y);
            cout << "Result " << "of " << x << oper << y << " is: " << result << endl;
        }
    
        return 0;
    }
    

    Grundlegendes zum Code

    • Da C++-Programme immer an der main() Funktion beginnen, müssen wir unseren anderen Code von dort aufrufen, daher ist eine #include Anweisung erforderlich, um diesen Code für unsere main() Funktion sichtbar zu machen.
    • Die Variablen x, y, , operund result werden deklariert, um die erste Zahl, die zweite Zahl, den Operator bzw. das Endergebnis zu speichern. Es empfiehlt sich immer, ihnen einige anfängliche Werte zu geben, um nicht definierte Verhaltensweisen zu vermeiden, was hier getan wird.
    • Die Zeile Calculator c; deklariert ein Objekt namens c als eine Instanz der Klasse Calculator. Die Klasse selbst ist nur eine Blaupause für die Funktionsweise von Rechnern; das Objekt ist der spezifische Rechner, der die Mathematik ausführt.
    • Die while (true)-Anweisung ist eine Schleife. Der Code innerhalb der Schleife wird immer wieder ausgeführt, solange die Bedingung innerhalb der () zutrifft. Da die Bedingung einfach als true aufgeführt ist, ist sie immer wahr, sodass die Schleife endlos ausgeführt wird. Um das Programm zu schließen, muss der Benutzer das Konsolenfenster manuell schließen. Andernfalls wartet das Programm immer auf neue Eingaben.
    • Das cin Schlüsselwort akzeptiert Eingaben vom Benutzer. Der Eingabedatenstrom ist intelligent genug, um eine im Konsolenfenster eingegebene Textzeile zu verarbeiten und in jeder der aufgelisteten Variablen in der Reihenfolge zu platzieren.
    • Der c.Calculate(x, oper, y); Ausdruck ruft die Calculate zuvor definierte Funktion auf und liefert die eingegebenen Eingabewerte und den angeforderten Vorgang. Die Funktion gibt dann eine Zahl zurück, die in result gespeichert wird.
    • Schließlich wird result auf die Konsole gedruckt und der Benutzer sieht das Ergebnis der Berechnung.

Erstellen und testen Sie den Code erneut.

Testen Sie nun das Programm erneut, um sicherzustellen, dass alles ordnungsgemäß funktioniert.

  1. Drücken Sie STRG+F5 , um die App neu zu erstellen und zu starten.

  2. Geben Sie 5+5 ein und drücken Sie Enter. Überprüfen Sie, ob das Ergebnis 10 ist.

    Screenshot eines Befehlsfensters mit den Ergebnissen der Ausführung des Programms.

    Die App gibt die Meldung aus: Geben Sie den auszuführenden Vorgang ein. Format: a+b | a-b | a*b | a/b. Der Benutzer hat 5+5 eingegeben. Ausgabe der App: Das Ergebnis von 5+5 ist: 10

  3. Beenden Sie das Programm, indem Sie das Konsolenfenster schließen.

Debuggen der App

Da der Benutzer frei ist, irgendetwas in das Konsolenfenster einzugeben, stellen wir sicher, dass der Rechner unerwartete Eingaben verarbeitet. Anstatt das Programm auszuführen, debuggen wir es, damit wir überprüfen können, was es schritt für Schritt ausführt.

Ausführen der App im Debugger

  1. Setzen Sie in CalcuatorTutorial.cpp einen Haltepunkt in der Zeile result = c.Calculate(x, oper, y);. Um den Haltepunkt festzulegen, klicken Sie neben der Linie in der grauen vertikalen Leiste am linken Rand des Editorfensters, sodass ein roter Punkt angezeigt wird.

    Screenshot des Visual Studio-Editors. Ein roter Punkt, der einen Haltepunkt darstellt, wird in der Zeile angezeigt: ergebnis = c.Calculate(x, oper, y).

    Wenn wir nun das Programm debuggen, wird die Ausführung an dieser Zeile angehalten. Wir haben bereits eine grobe Idee, dass das Programm für einfache Fälle funktioniert. Da wir die Ausführung nicht bei jedem Aufruf von Calculate() anhalten möchten, machen wir den Haltepunkt bedingt.

  2. Klicken Sie mit der rechten Maustaste auf den roten Punkt, der den Haltepunkt darstellt, und wählen Sie "Bedingungen" aus. Geben Sie im Bearbeitungsfeld für die Bedingung die Zeichenfolge (y == 0) && (oper == '/')ein. Wählen Sie die Schaltfläche "Schließen " aus, um die Haltepunktbedingung zu speichern.

    Screenshot eines festgelegten Haltepunkts

    Der Haltepunkt befindet sich in der Zeile: Ergebnis = c Punkt Berechnen ( x, Oper, y). 'Bedingungen...' Die Option "Bedingungen" ist aktiviert. Das Dropdownmenü "Bedingungen" ist auf "Bedingter Ausdruck" festgelegt. Das Bedingungsdropdown ist auf "ist wahr" festgelegt. Die Bedingung ist auf y == 0 && oper == '/' festgelegt.

    Jetzt wird die Ausführung am Haltepunkt angehalten, wenn die App versucht, durch 0 zu dividieren.

  3. Um das Programm zu debuggen, drücken Sie F5, oder wählen Sie die Symbolleistenschaltfläche für den lokalen Windows-Debugger mit dem grünen Pfeilsymbol aus. Wenn Sie in Ihrer Konsolen-App etwas wie "5 - 0" eingeben, verhält sich das Programm normal und wird weiterhin ausgeführt. Wenn Sie jedoch "10 / 0" eingeben, stoppt das Programm am Haltepunkt. Sie können eine beliebige Anzahl von Leerzeichen zwischen dem Operator und Zahlen platzieren: cin Ist intelligent genug, um die Eingabe entsprechend zu analysieren.

    Screenshot des Visual Studio-Editors. Die Programmausführung wurde am bedingten Haltepunkt in der Zeile angehalten: result = c.Calculate(x, oper, y);.

Nützliche Fenster im Debugger

Beim Debuggen des Codes werden möglicherweise einige neue Fenster angezeigt. Diese Fenster können Das Debuggen unterstützen. Sehen Sie sich das Fenster "Autos " an. Im Fenster "Autos " werden die aktuellen Werte der Variablen angezeigt, die mindestens drei Zeilen vor und bis zur aktuellen Zeile verwendet wurden. Wenn das Fenster "Autos" nicht angezeigt wird, wählen Sie im Hauptmenü "Windows>Autos> aus.

Screenshot des Fensters

Der Wert des Operators ist 47, Ergebnis ist 5, x ist 10, und y ist 0.

Um alle Variablen aus dieser Funktion anzuzeigen, wechseln Sie zum Fenster " Lokal" . Da dies eine kleine Funktion ist, werden im Fenster "Autos" und "Locals" dieselben Variablen angezeigt. Sie können jedoch die Werte dieser Variablen im Fenster "Lokal" ändern, während Sie debuggen, um zu sehen, welche Auswirkungen sie auf das Programm haben würden. In diesem Fall lassen wir sie allein. Öffnen Sie das Fenster "Lokal", indem Sie unten im Fenster "Autos" die Option "Lokal" auswählen oder im Hauptmenü ">>" auswählen.

Screenshot des Fensters

Der Wert von oper ist 47 '/', Ergebnis ist 0, x ist 10, und y ist 0.

Sie können auch mit dem Mauszeiger auf Variablen im Code zeigen, um die aktuellen Werte an dem Punkt anzuzeigen, an dem die Ausführung derzeit angehalten ist. Stellen Sie sicher, dass sich das Editorfenster im Fokus befindet, indem Sie zuerst darauf klicken.

Screenshot eines Tooltips, der den Wert der Variablen

Debuggen fortsetzen

  1. Der gelbe Pfeil auf der linken Seite zeigt den aktuellen Ausführungspunkt an. Die aktuelle Zeile ruft die Funktion Calculate auf. Drücken Sie also F11, um Schrittweise in die Funktion einzutreten. Jetzt führen Sie Code im Textkörper der Calculate Funktion aus. Seien Sie vorsichtig mit Step Into, da es in alle Funktionen in der Zeile, auf der Sie sich befinden, einschließlich der Standardbibliotheksfunktionen, hineintritt. Es ist in Ordnung, in die Standardbibliothek einzusteigen, aber Sie sind möglicherweise eher daran interessiert, sich auf Ihren Code anstelle von Bibliothekscode zu konzentrieren.

  2. Nachdem sich der Ausführungspunkt am Anfang der Calculate Funktion befindet, drücken Sie F10 , um zur nächsten Zeile in der Ausführung des Programms zu wechseln. F10 wird auch als Step Over bezeichnet. Sie können Schritt-Over verwenden, um von Zeile zu Zeile zu wechseln, ohne sich in die Details des Vorkommens in jedem Teil der Zeile einzutauchen. Im Allgemeinen sollten Sie "Step Over" anstelle von "Step Into " verwenden, es sei denn, Sie möchten tiefer in Code eintauchen, der von anderen Orten aufgerufen wird (wie Sie es getan haben, um den Textkörper Calculatezu erreichen).

  3. Fahren Sie mit F10 fort, um jede Zeile zu durchlaufen , bis Sie wieder zur Funktion in der main() anderen Datei gelangen, und beenden Sie die cout Zeile.

    Das Programm tut, was erwartet wird: Es dauert die erste Zahl und dividiert sie durch die zweite. Zeigen Sie in der cout Zeile auf die result Variable, oder sehen Sie sich im Fenster result einen Blick an. Der Wert ist inf, der nicht richtig aussieht.

    Screenshot des Debuggens des Rechners.

    Die aktuelle Anweisung im Debugger ist << "Result is: " << result < endl <; Im Fenster "Autos" ist das Ergebnis "inf".

    Lassen Sie uns das Problem beheben. Die cout Zeile gibt den Wert aus, der in result gespeichert ist. Wenn Sie also eine weitere Zeile mit F10 vorwärts gehen, zeigt das Konsolenfenster:

    Screenshot der Visual Studio-Debugkonsole mit dem Ergebnis einer Division durch Null-Vorgang.

    Die App zeigt an: Geben Sie den auszuführenden Vorgang ein. Format: a+b | a-b | a*b | a/b. Der Benutzer hat 5-0 eingegeben. Die App-Ausgabe: Ergebnis: 5. Der Benutzer hat 10/0 eingegeben. Die App-Ausgabe: Das Ergebnis ist: inf

    Dieses Ergebnis liegt daran, dass die Division durch Null nicht definiert ist, sodass das Programm keine numerische Antwort für den angeforderten Vorgang hat.

Beheben des Fehlers „Division durch Null“

Lassen Sie uns die Division durch Null eleganter behandeln, damit der Benutzer das Problem leichter verstehen kann.

  1. Nehmen Sie die folgenden Änderungen in CalculatorTutorial.cpp. Sie können das Programm während der Bearbeitung ausführen lassen, dank eines Debuggerfeatures namens "Bearbeiten" und "Weiter". Fügen Sie eine if folgende cin >> x >> oper >> y; Anweisung hinzu, um die Division durch Null zu überprüfen, und geben Sie eine Nachricht an den Benutzer aus, wenn dies geschieht. Andernfalls wird das Ergebnis gedruckt.

    // CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there.
    //
    
    #include <iostream>
    #include "Calculator.h"
    
    using namespace std;
    
    int main()
    {
        double x = 0.0;
        double y = 0.0;
        double result = 0.0;
        char oper = '+';
    
        cout << "Calculator Console Application" << endl << endl;
        cout << "Please enter the operation to perform. Format: a+b | a-b | a*b | a/b" << endl;
    
        Calculator c;
        while (true)
        {
            cin >> x >> oper >> y;
            if (oper == '/' && y == 0)
            {
                cout << "Math error: Attempted to divide by zero!" << endl;
                continue;
            }
            else
            {
                result = c.Calculate(x, oper, y);
            }
            cout << "Result " << "of " << x << oper << y << " is: " << result << endl;
        }
    
        return 0;
    }
    
  2. Drücken Sie einmal F5 . Die Programmausführung wird fortgesetzt, bis sie angehalten werden muss, um Benutzereingaben zu bitten. Geben Sie erneut ein 10 / 0 . Jetzt wird eine hilfreichere Nachricht gedruckt. Der Benutzer wird um mehr Eingabe gebeten, und das Programm wird weiterhin normal ausgeführt.

    Screenshot eines Konsolenfensters mit der endgültigen Ausgabe nach der Implementierung von Änderungen zur Verarbeitung der Division durch Null.

    Das Konsolenfenster zeigt zwei Zeilen an: 10 / 0 Ergebnis ist: inf, gefolgt von, 10 / 0 Mathematischer Fehler: Versucht, durch Null zu dividieren.

    Hinweis

    Wenn Sie Code im Debugmodus bearbeiten, besteht das Risiko, dass Code veraltet wird. Dies geschieht, wenn der Debugger weiterhin Ihren alten Code ausführt und ihn noch nicht mit Ihren Änderungen aktualisiert hat. Der Debugger zeigt ein Dialogfeld an, in dem Sie darüber informiert werden, wann dies geschieht. Manchmal müssen Sie möglicherweise F5 drücken, um den ausgeführten Code zu aktualisieren. Wenn Sie insbesondere innerhalb einer Funktion eine Änderung vornehmen, während sich der Ausführungspunkt innerhalb dieser Funktion befindet, müssen Sie die Funktion aussteigen und dann wieder in die Funktion zurückkehren, um den aktualisierten Code abzurufen. Wenn dies nicht funktioniert und eine Fehlermeldung angezeigt wird, können Sie das Debuggen beenden, indem Sie auf das rote Quadrat in der Symbolleiste unter den Menüs oben in der IDE klicken, und dann das Debuggen erneut starten, indem Sie F5 eingeben oder den grünen "Wiedergabe"-Pfeil neben der Stoppschaltfläche auf der Symbolleiste auswählen.

    Ein weiterer Grund, warum "Bearbeiten und Fortfahren" möglicherweise fehlschlägt, ist, wenn Sie eine Meldung sehen, die besagt, dass "Die Quelle-Dateien genau mit der ursprünglichen Version übereinstimmen müssen", und dass diese Einstellung unter Debug-Optionen-Allgemein aktiviert sein sollte. Um dies zu beheben, wählen Sie im Hauptmenü >>Optionen>Debuggen>Allgemein und stellen Sie sicher, dass > aktiviert ist.

    Grundlegendes zu den Verknüpfungen "Ausführen" und "Debuggen"

    • F5 oder Debuggen>starten Sie das Debuggen, startet eine Debugsitzung, wenn eine noch nicht aktiv ist, und führt das Programm aus, bis ein Haltepunkt erreicht wird oder das Programm Benutzereingaben benötigt. Wenn keine Benutzereingabe erforderlich ist und kein Haltepunkt zum Drücken verfügbar ist, wird das Programm beendet, und das Konsolenfenster wird geschlossen, wenn die Ausführung des Programms abgeschlossen ist. Wenn Ihr Programm in die Konsole ausgibt, verwenden Sie STRG+F5; oder legen Sie einen Haltepunkt fest, bevor Sie F5 drücken, um das Fenster offen zu halten.
    • STRG+F5, oder Debug>Start ohne Debugging führt die Anwendung aus, ohne in den Debugmodus zu wechseln. Dies ist etwas schneller als das Debuggen, und das Konsolenfenster bleibt geöffnet, nachdem das Programm die Ausführung abgeschlossen hat.
    • Mit F10, der als "Step Over" bezeichnet wird, können Sie Code, Zeile für Zeile durchlaufen und visualisieren, wie der Code ausgeführt wird und welche Variablenwerte bei jedem Ausführungsschritt vorliegen.
    • F11, bekannt als "Schritt in", funktioniert ähnlich wie "Step Over", mit der Ausnahme, dass er in allen Funktionen ausgeführt wird, die in der Ausführungszeile aufgerufen werden. Wenn beispielsweise die ausgeführte Zeile eine Funktion aufruft, verschiebt das Drücken von F11 den Mauszeiger in den Textkörper der Funktion, sodass Sie dem Code der Funktion folgen können, der ausgeführt wird, bevor Sie zur Zeile zurückkehren, an der Sie begonnen haben. Drücken von F10-Schritten über den Funktionsaufruf und wechselt einfach zur nächsten Zeile. Der Funktionsaufruf geschieht weiterhin, aber das Programm hält nicht an, um Ihnen zu zeigen, was sie tut.

Schließen der App

  • Wenn die Rechner-App noch läuft, schließen Sie das Konsolenfenster, um sie zu stoppen.

Git-Quellcodeverwaltung hinzufügen

Nachdem Sie nun eine App erstellt haben, möchten Sie sie möglicherweise einem Git-Repository hinzufügen. Wir haben für Sie gesorgt. Visual Studio erleichtert diesen Prozess mit Git-Tools, die Sie direkt über die IDE verwenden können.

Tipp

Git ist das am häufigsten verwendete moderne Versionssteuerungssystem, also unabhängig davon, ob Sie ein professioneller Entwickler sind oder wie Sie coden lernen, Git kann sehr nützlich sein. Wenn Sie noch nicht mit Git arbeiten, ist die https://git-scm.com/ Website ein guter Ausgangspunkt. Dort finden Sie Spickzettel, ein beliebtes Online-Buch und Git Basics-Videos.

Um Ihren Code git zuzuordnen, erstellen Sie zunächst ein neues Git-Repository, in dem sich Ihr Code befindet. Gehen Sie dazu wie folgt vor:

  1. Wählen Sie in der Statusleiste in der unteren rechten Ecke von Visual Studio " Zur Quellcodeverwaltung hinzufügen" und dann Git aus.

    Screenshot der Git-Quellcodeverwaltungsschaltflächen unter dem Bereich des Projektmappen-Explorers, wobei die Schaltfläche

  2. Melden Sie sich im Dialogfeld " Git-Repository erstellen " bei GitHub an.

    Screenshot des Dialogfelds

    Der Repositoryname wird basierend auf Ihrem Ordnerspeicherort automatisch aufgefüllt. Standardmäßig ist Ihr neues Repository privat, was bedeutet, dass Sie die einzige Person sind, die darauf zugreifen kann.

    Tipp

    Unabhängig davon, ob Ihr Repository öffentlich oder privat ist, empfiehlt es sich, eine Remotesicherung Ihres Codes sicher auf GitHub zu speichern. Auch wenn Sie nicht mit einem Team arbeiten, stellt ein Remote-Repository Ihren Code von jedem Computer aus zur Verfügung.

  3. Wählen Sie Erstellen und pushen aus.

    Nachdem Sie Ihr Repository erstellt haben, werden Statusdetails in der Statusleiste angezeigt.

    Screenshot der Statusleiste des Repositories unterhalb des Bereichs

    Das erste Symbol mit den Pfeilen zeigt, wie viele ausgehende/eingehende Commits sich in Ihrer aktuellen Verzweigung befinden. Sie können dieses Symbol verwenden, um alle eingehenden Commits abzurufen oder ausgehende Commits zu übertragen. Sie können auch wählen, sich diese Commits zuerst anzeigen zu lassen. Wählen Sie dazu das Symbol aus, und wählen Sie dann " Ausgehende/eingehende Ansicht" aus.

    Das zweite Symbol mit dem Bleistift zeigt die Anzahl der nicht übernommenen Änderungen an Ihrem Code an. Sie können dieses Symbol auswählen, um diese Änderungen im Fenster Git Changes anzuzeigen.

Weitere Informationen zur Verwendung von Git mit Ihrer App finden Sie in der Visual Studio-Versionssteuerungsdokumentation.

Die fertige App

Glückwunsch! Sie haben den Code für die Rechner-App abgeschlossen, erstellt und gedebuggt und zu einem Repository hinzugefügt, alles in Visual Studio.

Nächste Schritte

Weitere Informationen zu Visual Studio für C++

Der übliche Ausgangspunkt für einen C++-Programmierer ist eine Anwendung "Hello, world!", die auf der Befehlszeile ausgeführt wird. Sie beginnen damit in diesem Artikel, und fahren Sie dann mit einer schwierigeren Aufgabe fort: einer Rechner-App.

Voraussetzungen

Erstellen Ihres App-Projekts

Visual Studio verwendet Projekte zum Organisieren des Codes für eine App und Lösungen zum Organisieren eines oder mehrerer Projekte. Ein Projekt enthält alle Optionen, Konfigurationen und Regeln, die zum Erstellen einer App verwendet werden. Außerdem wird die Beziehung zwischen allen Projektdateien und externen Dateien verwaltet. Um Ihre App zu erstellen, erstellen Sie zuerst ein neues Projekt und eine neue Lösung.

  1. Wählen Sie auf der Menüleiste in Visual Studio Datei>Neu>Projekt aus. Das Fenster "Neues Projekt" wird geöffnet.

  2. Stellen Sie auf der linken Randleiste sicher, dass Visual C++ ausgewählt ist. Wählen Sie in der Mitte die Konsolen-App aus.

  3. Geben Sie im Textfeld "Name" unten den Namen des neuen Projekts "CalculatorTutorial" ein, und wählen Sie dann "OK" aus.

    Screenshot des Dialogfelds

    Links ist "Andere Sprachen" > Visual C++ ausgewählt. In der Mitte ist der Konsolen-App-Projekttyp ausgewählt. Das Textfeld "Name" enthält "CalculatorTutorial".

    Es wird eine leere C++-Windows-Konsolenanwendung "Hello World" erstellt. Konsolenanwendungen verwenden ein Windows-Konsolenfenster, um die Ausgabe anzuzeigen und Benutzereingaben zu akzeptieren. In Visual Studio wird ein Editorfenster geöffnet und zeigt den generierten Code an:

    // CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there.
    //
    
    #include <iostream>
    
    int main()
    {
        std::cout << "Hello World!\n";
    }
    
    // Run program: Ctrl + F5 or Debug > Start Without Debugging menu
    // Debug program: F5 or Debug > Start Debugging menu
    
    // Tips for Getting Started:
    //   1. Use the Solution Explorer window to add/manage files
    //   2. Use the Team Explorer window to connect to source control
    //   3. Use the Output window to see build output and other messages
    //   4. Use the Error List window to view errors
    //   5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project
    //   6. In the future, to open this project again, go to File > Open > Project and select the .sln file
    

Überprüfen, ob Ihre neue App erstellt und ausgeführt wird

Die Vorlage für eine neue Windows-Konsolenanwendung erstellt eine einfache C++-App "Hello World". An diesem Punkt können Sie sehen, wie Visual Studio die von Ihnen erstellten Apps direkt aus der IDE erstellt und ausführt.

  1. Um Ihr Projekt zu erstellen, wählen Sie im Menü "Build" die Option "Build Solution" aus. Das Ausgabefenster zeigt die Ergebnisse des Buildprozesses an.

    Screenshot des Visual Studio-Ausgabefensters, das zeigt, dass der Build erfolgreich war.

  2. Um den Code auszuführen, wählen Sie auf der Menüleiste "Debuggen" aus, "Starten" ohne Debugging (STRG+F5).

    Screenshot der Visual Studio-Debugkonsole mit der Ausgabe : Hello World!

    Ein Konsolenfenster wird geöffnet, und Ihre App wird darin ausgeführt.

    Wenn Sie eine Konsolen-App in Visual Studio starten, wird Ihr Code ausgeführt und Press any key to close this window . . . angezeigt, damit Sie die Ausgabe sehen können.

    Glückwunsch! Sie haben Ihre erste Konsolen-App "Hello, world!" in Visual Studio erstellt!

  3. Drücken Sie eine Taste, um das Konsolenfenster zu schließen und zu Visual Studio zurückzukehren.

Sie verfügen jetzt über die Tools zum Erstellen und Ausführen Ihrer App nach jeder Änderung, um sicherzustellen, dass der Code weiterhin wie erwartet funktioniert. Später zeigen wir Ihnen, wie Sie es debuggen, wenn dies nicht der Fehler ist.

Bearbeiten des Codes

Lassen Sie uns nun den Code in dieser Vorlage in eine Rechner-App umwandeln.

  1. Ersetzen Sie den Inhalt der CalculatorTutorial.cpp Datei durch den folgenden Code, damit er diesem Beispiel entspricht:

    // CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there.
    //
    
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        cout << "Calculator Console Application" << endl << endl;
        cout << "Please enter the operation to perform. Format: a+b | a-b | a*b | a/b" << endl;
        return 0;
    }
    
    // Run program: Ctrl + F5 or Debug > Start Without Debugging menu
    // Debug program: F5 or Debug > Start Debugging menu
    // Tips for Getting Started:
    //   1. Use the Solution Explorer window to add/manage files
    //   2. Use the Team Explorer window to connect to source control
    //   3. Use the Output window to see build output and other messages
    //   4. Use the Error List window to view errors
    //   5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project
    //   6. In the future, to open this project again, go to File > Open > Project and select the .sln file
    

    Grundlegendes zum Code:

    • Die #include Anweisung importiert Code aus anderen Dateien. Manchmal sehen Sie möglicherweise einen Dateinamen in spitzen Klammern wie <iostream>. Die winkeligen Klammern weisen den Compiler an, zuerst in den Standardsystemverzeichnissen nach der iostream Headerdatei zu suchen, und wenn nicht gefunden, in Verzeichnissen zu suchen, die für das Projekt spezifisch sind. In anderen Zeiten wird möglicherweise ein Dateiname umgeben von Anführungszeichen wie "someHeader.h". Die Anführungszeichen weisen den Compiler an, die Suche in den Standardsystemverzeichnissen zu überspringen und stattdessen nur in Verzeichnissen zu suchen, die für das Projekt spezifisch sind.
    • Der using namespace std; teilt dem Compiler mit, dass Code aus der C++-Standardbibliothek in dieser Datei verwendet werden soll. Ohne diese Zeile müsste jedem Schlüsselwort aus der Bibliothek vorangestellt std:: werden, um den Bereich zu kennzeichnen. Ohne diese Zeile würde beispielsweise jeder Bezug auf cout als std::cout geschrieben werden. Die using Anweisung wird hinzugefügt, um den Zugriff auf Code in einem anderen Namespace zu erleichtern.
    • Das cout Schlüsselwort wird in C++ in die Standardausgabe gedruckt. Der << Operator weist den Compiler an, alles, was rechts davon ist, an die Standardausgabe zu senden.
    • Das endl Schlüsselwort ist wie die EINGABETASTE; es beendet die Zeile und bewegt den Cursor zur nächsten Zeile. Es ist eine bessere Praxis, ein \n innerhalb der Zeichenkette (eingeschlossen von "") zu platzieren, um dasselbe zu erreichen, weil endl den Puffer immer leert und die Leistung des Programms beeinträchtigen kann. Da dies jedoch eine sehr kleine App ist, endl wird stattdessen verwendet.
    • Alle C++-Anweisungen müssen mit Semikolons enden, und alle C++-Anwendungen müssen eine main() Funktion enthalten. Diese Funktion ist das, was das Programm am Anfang ausführt. Der gesamte Code muss von main() aus zugänglich sein, damit er verwendet werden kann.
  2. Um die Datei zu speichern, drücken Sie STRG+S, oder wählen Sie auf der Symbolleiste unter der Menüleiste das Diskettensymbol aus.

  3. Um die Anwendung auszuführen, drücken Sie STRG+F5 , oder wechseln Sie zum Menü "Debuggen ", und wählen Sie "Ohne Debuggen starten" aus. Wenn Sie ein Popup erhalten, das besagt, dass dieses Projekt veraltet ist, wählen Sie möglicherweise erneut "Dieses Dialogfeld nicht anzeigen" aus, und wählen Sie dann "Ja " aus, um Ihre Anwendung zu erstellen. Es sollte ein Konsolenfenster angezeigt werden, das wie folgt aussieht:

    Screenshot der Rechner-App, die in einem Konsolenfenster ausgeführt wird.

    Die Konsolen-App zeigt die Ausgabe an: Rechnerkonsolenanwendung. Geben Sie den auszuführenden Vorgang ein. Format: a+b | a-b | a*b | a/b. Der Vorgang wurde mit Code 0 beendet, und es wird eine Meldung angezeigt, dass die Konsole beim Beenden des Debuggens automatisch geschlossen werden soll, aktivieren Sie Tools > Optionen > Debuggen > Die Konsole automatisch schließen, wenn das Debuggen beendet wird. Schließlich gibt es eine Meldung, um eine beliebige Taste zu drücken, um dieses Fenster zu schließen.

  4. Schließen Sie das Konsolenfenster, wenn Sie fertig sind.

Hinzufügen von Code zum Ausführen einiger Mathematischer Berechnungen

Eine Klasse ist wie eine Blaupause für ein Objekt, das etwas tut. In diesem Fall definieren wir eine Rechnerklasse, die die mathematische Logik enthält.

Hinzufügen einer Rechnerklasse

  1. Wechseln Sie zum Menü "Projekt ", und wählen Sie "Klasse hinzufügen" aus. Geben Sie im Bearbeitungsfeld KlassennameRechner ein. Wählen Sie OK aus.

    Screenshot des Dialogfelds

    Das Feld "Klassenname" enthält den Textrechner. Das H-Dateifeld enthält "Calculator.h". Das .cpp Dateifeld enthält Calculator.cpp. Das Basisklassenfeld ist leer. Die Optionen für "Inline" und "Verwaltet" sind deaktiviert.

    Eine Klasse ist wie eine Blaupause für ein Objekt, das etwas tut. In diesem Fall definieren wir einen Rechner und wie es funktionieren soll.

    Ihrem Projekt werden zwei neue Dateien hinzugefügt. Wenn Sie alle geänderten Dateien gleichzeitig speichern möchten, drücken Sie STRG+UMSCHALT+S. Es ist eine Tastenkombination für "Datei>Alle speichern". Es gibt auch eine Symbolleistenschaltfläche für "Alle speichern", ein Symbol von zwei Disketten, die neben der Schaltfläche " Speichern " zu finden sind. Im Allgemeinen empfiehlt es sich, " Alle speichern" häufig zu erledigen, sodass Beim Speichern keine Dateien fehlen.

    Der Assistent zum Klasse hinzufügen erstellt .h und .cpp Dateien mit demselben Namen wie die Klasse. Im Projektmappen-Explorer-Fenster können Sie eine vollständige Liste Ihrer Projektdateien sehen, die am Rand der IDE sichtbar ist. Wenn der Projektmappen-Explorer nicht angezeigt wird, öffnen Sie ihn in der Menüleiste: Wählen Sie "Projektmappen-Explorer> aus.

    Screenshot des Visual Studio-Projektmappen-Explorer-Fensters.

    Das Rechner-Tutorial-Projekt hat einen Knoten für Header-Dateien mit "Calculator.h", "stdafx.h" und "targetver.h". Ein Knoten "Quelldateien" enthält Calculator.cpp, CalculatorTutorial.cpp und stdafx.cpp. Knoten für Verweise, externe Abhängigkeiten und Ressourcendateien sind sichtbar, aber geschlossen.

    Sie können eine Datei öffnen, indem Sie im Projektmappen-Explorer-Fenster darauf doppelklicken. Doppelklicken Sie Calculator.h , um sie zu öffnen.

  2. Ersetzen Sie den Inhalt von Calculator.h mit dem folgenden Code, sodass die Datei jetzt so aussieht.

    #pragma once
    class Calculator
    {
    public:
        double Calculate(double x, char oper, double y);
    };
    

    Grundlegendes zum Code

    • Dieser Code deklariert eine neue Funktion, die mathematische CalculateVorgänge für Addition, Subtraktion, Multiplikation und Division behandelt.
    • C++-Code ist in Headerdateien () und .h (.cpp) angeordnet. Einige andere Dateierweiterungen werden von verschiedenen Compilern unterstützt, aber dies sind die wichtigsten, die Sie kennen sollten. Funktionen und Variablen werden normalerweise deklariert, das heißt, dass sie einen Namen und einen Typ in Header-Dateien bekommen, und implementiert oder in Quell-Dateien definiert werden. Um auf code zuzugreifen, der in einer anderen Datei definiert ist, können Sie verwenden #include "filename.h", wobei filename.h der Name der Datei ist, die die Variablen oder Funktionen deklariert, die Sie verwenden möchten.
    • Es empfiehlt sich, Ihren Code basierend auf ihrer Funktionsweise in verschiedene Dateien zu organisieren, sodass sie den code, den Sie später benötigen, ganz einfach finden. In unserem Fall definieren wir die Calculator Klasse getrennt von der Datei, die die main() Funktion enthält, aber wir planen, auf die Calculator Klasse zu verweisen in main().
  3. Eine grüne Wellenlinie erscheint unter Calculate, da die Calculate Funktion zwar deklariert wird, sie aber nicht definiert ist. Zeigen Sie mit der Maus auf Calculateden Pfeil nach unten auf der Glühbirne, und wählen Sie "Definition berechnen" in .Calculator.cpp Ein Popup wird angezeigt, mit dem Sie einen Überblick über die Codeänderung erhalten, die in der anderen Datei vorgenommen wurde. Der Code wurde zu Calculator.cpp hinzugefügt.

    Video mit der Dropdownliste

    Derzeit wird nur 0,0 zurückgegeben. Das ändern wir jetzt. Drücken Sie ESC , um das Popup zu schließen, und wählen Sie "Ja " aus, um die Änderungen zu speichern.

  4. Wechseln Sie im Editorfenster zur Calculator.cpp Datei. Ersetzen Sie den Inhalt der Datei durch den folgenden Code:

    #include "Calculator.h"
    
    double Calculator::Calculate(double x, char oper, double y)
    {
        switch(oper)
        {
            case '+':
                return x + y;
            case '-':
                return x - y;
            case '*':
                return x * y;
            case '/':
                return x / y;
            default:
                return 0.0;
        }
    }
    

    Grundlegendes zum Code

    • Die Funktion Calculate verwendet eine Zahl, einen Operator und eine zweite Zahl. Anschließend führt sie den angeforderten Vorgang für die beiden Nummern aus.
    • Die switch Anweisung überprüft, welcher Operator bereitgestellt wurde, und führt den Fall aus, der diesem Vorgang entspricht. Der default: Fall ist ein Fallback, falls der Benutzer einen Operator eingibt, der von keiner der vorherigen case Anweisungen behandelt wird. Es empfiehlt sich, ungültige Benutzereingaben eleganter zu behandeln, dies liegt jedoch außerhalb des Umfangs dieses Lernprogramms.
    • Das double Schlüsselwort zeigt einen Zahlentyp an, der Dezimalstellen unterstützt. Dieser Zahlentyp wird als Gleitkommazahl bezeichnet und double bedeutet eine Gleitkommazahl mit zusätzlicher Genauigkeit. Auf diese Weise kann der Rechner sowohl Dezimalmathematik als auch Ganzzahlmathematik verarbeiten. Die Calculate Funktion ist erforderlich, um immer eine Gleitkommazahl mit doppelter Genauigkeit aufgrund des double Codeanfangs zurückzugeben (dies bezeichnet den Rückgabetyp der Funktion), weshalb im Standardfall 0,0 zurückgegeben wird.
    • Die .h Datei deklariert den Funktionsprototyp, der dem Compiler vorab angibt, welche Parameter erforderlich sind, und welche Rückgabetyp davon erwartet werden soll. Die .cpp Datei enthält alle Implementierungsdetails der Funktion.

Wenn Sie den Code zu diesem Zeitpunkt erstellen und erneut ausführen, wird er nach der Aufforderung, welche Operation ausgeführt werden soll, noch beendet. Ändern Sie als Nächstes die main Funktion, um einige Berechnungen durchzuführen.

Aufrufen der Memberfunktionen der Rechnerklasse

  1. Aktualisieren Sie die Funktion in main wie folgt:

    // CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there.
    //
    
    #include <iostream>
    #include "Calculator.h"
    
    using namespace std;
    
    int main()
    {
        double x = 0.0;
        double y = 0.0;
        double result = 0.0;
        char oper = '+';
    
        cout << "Calculator Console Application" << endl << endl;
        cout << "Please enter the operation to perform. Format: a+b | a-b | a*b | a/b" << endl;
    
        Calculator c;
        while (true)
        {
            cin >> x >> oper >> y;
            result = c.Calculate(x, oper, y);
            cout << "Result is: " << result << endl;
        }
    
        return 0;
    }
    

    Grundlegendes zum Code

    • Da C++-Programme immer an der main() Funktion beginnen, müssen wir unseren anderen Code von dort aufrufen, daher ist eine #include Anweisung erforderlich, um diesen Code für unsere main() Funktion sichtbar zu machen.
    • Die Variablen x, y, , operund result werden deklariert, um die erste Zahl, die zweite Zahl, den Operator bzw. das Endergebnis zu speichern. Es empfiehlt sich immer, ihnen einige anfängliche Werte zu geben, um nicht definierte Verhaltensweisen zu vermeiden, was hier getan wird.
    • Die Zeile Calculator c; deklariert ein Objekt namens c als eine Instanz der Klasse Calculator. Die Klasse selbst ist nur eine Blaupause für die Funktionsweise von Rechnern; das Objekt ist der spezifische Rechner, der die Mathematik ausführt.
    • Die while (true)-Anweisung ist eine Schleife. Der Code innerhalb der Schleife wird immer wieder ausgeführt, solange die Bedingung innerhalb von () erfüllt ist. Da die Bedingung einfach als true aufgeführt ist, ist sie immer wahr, sodass die Schleife endlos ausgeführt wird. Um das Programm zu schließen, muss der Benutzer das Konsolenfenster manuell schließen. Andernfalls wartet das Programm immer auf neue Eingaben.
    • Das cin Schlüsselwort akzeptiert Eingaben vom Benutzer. Der Eingabedatenstrom ist intelligent genug, um eine im Konsolenfenster eingegebene Textzeile zu verarbeiten und in jeder der aufgelisteten Variablen in der Reihenfolge zu platzieren.
    • Der c.Calculate(x, oper, y); Ausdruck ruft die Calculate zuvor definierte Funktion auf und liefert die eingegebenen Eingabewerte und den angeforderten Vorgang. Die Funktion gibt dann eine Zahl zurück, die in result gespeichert wird.
    • Schließlich wird result auf die Konsole gedruckt und der Benutzer sieht das Ergebnis der Berechnung.

Erstellen und testen Sie den Code erneut.

Testen Sie das Programm erneut, um sicherzustellen, dass alles ordnungsgemäß funktioniert.

  1. Drücken Sie STRG+F5 , um die App neu zu erstellen und zu starten.

  2. Geben Sie 5+5 ein und drücken Sie Enter. Überprüfen Sie, ob das Ergebnis 10 ist.

    Screenshot eines Befehlsfensters, in dem die Rechner-App ausgeführt wird. Es zeigt, dass das Ergebnis von 5 + 5 10 ist.

  3. Beenden Sie das Programm, indem Sie das Konsolenfenster schließen.

Debuggen der App

Da der Benutzer frei ist, irgendetwas in das Konsolenfenster einzugeben, stellen wir sicher, dass der Rechner unerwartete Eingaben verarbeitet. Anstatt das Programm auszuführen, debuggen wir es stattdessen, sodass wir überprüfen können, was es schritt-für-Schritt ausführt.

Ausführen der App im Debugger

  1. Legen Sie in CalcuatorTutorial.cpp einen Haltepunkt auf der result = c.Calculate(x, oper, y); Zeile fest. Um den Haltepunkt festzulegen, klicken Sie neben der Linie in der grauen vertikalen Leiste am linken Rand des Editorfensters, sodass ein roter Punkt angezeigt wird.

    Screenshot des Benutzers, der einen Haltepunkt in Zeile 23 festlegt: Ergebnis = c.Calculate(x, Oper, y);.

    Wenn Sie nun das Programm debuggen, wird die Ausführung immer in dieser Zeile angehalten. Wir haben bereits eine grobe Idee, dass das Programm für einfache Fälle funktioniert. Da wir die Ausführung nicht jedes Mal unterbrechen möchten, lassen Sie uns den Haltepunkt bedingt setzen.

  2. Klicken Sie mit der rechten Maustaste auf den roten Punkt, der den Haltepunkt darstellt, und wählen Sie "Bedingungen" aus. Geben Sie im Bearbeitungsfeld für die Bedingung die Zeichenfolge (y == 0) && (oper == '/')ein. Wählen Sie die Schaltfläche " Schließen ", wenn Sie fertig sind, um die Haltepunktbedingung zu speichern.

    Screenshot des Fensters des bedingten Haltepunkts.

    Der Haltepunkt befindet sich in der Zeile: Ergebnis = c Punkt Berechnen ( x, Oper, y). 'Bedingungen...' Die Option "Bedingungen" ist aktiviert. Das Dropdownmenü "Bedingungen" ist auf "Bedingter Ausdruck" festgelegt. Das Bedingungsdropdown ist auf "ist wahr" festgelegt. Die Bedingung ist auf y == 0 && oper == '/' festgelegt.

    Die Ausführung wird am Haltepunkt angehalten, falls eine Division durch 0 versucht wird.

  3. Um das Programm zu debuggen, drücken Sie F5, oder wählen Sie die Symbolleistenschaltfläche " Lokaler Windows-Debugger " mit dem grünen Pfeilsymbol aus. Wenn Sie in Ihrer Konsolen-App etwas wie "5 - 0" eingeben, verhält sich das Programm normal und wird weiterhin ausgeführt. Wenn Sie jedoch "10 / 0" eingeben, stoppt das Programm am Haltepunkt. Sie können sogar eine beliebige Anzahl von Leerzeichen zwischen Dem Operator und Zahlen platzieren; cin ist intelligent genug, um die Eingabe entsprechend zu analysieren.

    Video, in dem die Programmausführung am bedingten Haltepunkt angehalten wurde.

    Der Benutzer gibt 5 - 0 ein. Die App gibt aus: Das Ergebnis ist 5. Der Benutzer gibt dann 10/0 ein, und da die Bedingung für den bedingten Haltepunkt erfüllt ist, stoppt die Ausführung in der Zeile: Ergebnis = c.Calculate(x, Oper, y);

Nützliche Fenster im Debugger

Beim Debuggen des Codes werden möglicherweise einige neue Fenster angezeigt. Diese Fenster können Das Debuggen unterstützen. Sehen Sie sich das Fenster "Autos " an. Im Fenster "Autos " werden die aktuellen Werte der Variablen angezeigt, die mindestens drei Zeilen vor und bis zur aktuellen Zeile verwendet wurden. Wenn das Fenster "Autos" nicht angezeigt wird, wählen Sie im Hauptmenü "Windows>Autos> aus.

Screenshot des Fensters

Der Wert des Operators ist 47, Ergebnis ist 5, x ist 10, und y ist 0.

Um alle Variablen aus dieser Funktion anzuzeigen, wechseln Sie zum Fenster " Lokal" . Da dies eine kleine Funktion ist, werden im Fenster "Autos" und "Locals" dieselben Variablen angezeigt. Sie können die Werte dieser Variablen beim Debuggen jedoch ändern, um zu sehen, welche Auswirkungen sie auf das Programm haben würden. In diesem Fall lassen wir sie allein. Öffnen Sie das Fenster "Lokal", indem Sie unten im Fenster "Autos" die Option "Lokal" auswählen oder im Hauptmenü ">>" auswählen.

Screenshot des Fensters

Der Wert von oper ist 47 '/', Ergebnis ist 0, x ist 10, und y ist 0.

Sie können auch mit dem Mauszeiger auf Variablen im Code selbst zeigen, um die aktuellen Werte anzuzeigen, in denen die Ausführung derzeit angehalten ist. Stellen Sie sicher, dass sich das Editorfenster im Fokus befindet, indem Sie zuerst darauf klicken.

Video, in dem eine QuickInfo veranschaulicht wird, die angezeigt wird, während Sie mit dem Mauszeiger auf die Variable y zeigen. Es zeigt den aktuellen y-Wert an, der 0 ist.

Debuggen fortsetzen

  1. Der gelbe Pfeil auf der linken Seite zeigt den aktuellen Ausführungspunkt an. Die aktuelle Zeile ruft auf Calculate. Drücken Sie also F11 , um in die Funktion einzusteigen , wodurch Sie in den Textkörper der Calculate Funktion gelangen. Seien Sie vorsichtig mit Step Into, da es in alle Funktionen in der Zeile, auf der Sie sich befinden, einschließlich der Standardbibliotheksfunktionen, hineintritt. Es ist in Ordnung, in die Standardbibliothek einzusteigen, aber Sie sind möglicherweise eher daran interessiert, sich auf Ihren Code anstelle von Bibliothekscode zu konzentrieren.

  2. Nachdem sich der Ausführungspunkt am Anfang der Calculate Funktion befindet, drücken Sie F10 , um zur nächsten Zeile in der Ausführung des Programms zu wechseln. F10 wird auch als Step Over bezeichnet. Sie können Schritt-Over verwenden, um von Zeile zu Zeile zu wechseln, ohne sich in die Details des Vorkommens in jedem Teil der Zeile einzutauchen. Im Allgemeinen sollten Sie "Step Over" anstelle von "Step Into" verwenden, es sei denn, Sie möchten tiefer in Code eintauchen, der von anderen Orten aufgerufen wird (wie Sie es getan haben, um den Textkörper Calculatezu erreichen).

  3. Fahren Sie mit F10 fort, um jede Zeile zu durchlaufen , bis Sie wieder zur Funktion in der main() anderen Datei gelangen, und beenden Sie die cout Zeile.

    Das Programm tut, was erwartet wird: Es dauert die erste Zahl und dividiert sie durch die zweite. Zeigen Sie in der cout Zeile auf die result Variable, oder sehen Sie sich im Fenster result einen Blick an. Der Wert ist inf, der nicht richtig aussieht.

    Screenshot des Debuggens des Rechners.

    Die aktuelle Anweisung im Debugger ist << "Result is: " << result < endl <; Im Fenster "Autos" ist das Ergebnis "inf".

    Lassen Sie uns das Problem beheben. Die cout Zeile gibt den Wert aus, der in result gespeichert ist. Wenn Sie also eine weitere Zeile mit F10 vorwärts gehen, zeigt das Konsolenfenster:

    Screenshot der Visual Studio-Debugkonsole mit dem Ergebnis einer Division durch Null-Vorgang.

    Die App zeigt an: Geben Sie den auszuführenden Vorgang ein. Format: a+b | a-b | a*b | a/b. Der Benutzer hat 5-0 eingegeben. Die App-Ausgabe: Ergebnis: 5. Der Benutzer hat 10/0 eingegeben. Die App-Ausgabe: Das Ergebnis ist: inf

    Dieses Ergebnis liegt daran, dass die Division durch Null nicht definiert ist, sodass das Programm keine numerische Antwort für den angeforderten Vorgang hat.

Beheben des Fehlers „Division durch Null“

Lassen Sie uns die Division durch Null eleganter behandeln, damit der Benutzer das Problem leichter verstehen kann.

  1. Nehmen Sie die folgenden Änderungen in CalculatorTutorial.cpp. (Sie können das Programm während der Bearbeitung ausführen, dank eines Debuggerfeatures namens Edit and Continue). Die Änderung besteht darin, eine if folgende cin >> x >> oper >> y; Anweisung hinzuzufügen, um die Division durch Null zu überprüfen und eine Nachricht an den Benutzer auszugeben, wenn dies geschieht. Andernfalls wird das Ergebnis gedruckt:

    // CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there.
    //
    
    #include <iostream>
    #include "Calculator.h"
    
    using namespace std;
    
    int main()
    {
        double x = 0.0;
        double y = 0.0;
        double result = 0.0;
        char oper = '+';
    
        cout << "Calculator Console Application" << endl << endl;
        cout << "Please enter the operation to perform. Format: a+b | a-b | a*b | a/b" << endl;
    
        Calculator c;
        while (true)
        {
            cin >> x >> oper >> y;
            if (oper == '/' && y == 0)
            {
                cout << "Division by 0 exception" << endl;
                continue;
            }
            else
            {
                result = c.Calculate(x, oper, y);
            }
            cout << "Result is: " << result << endl;
        }
    
        return 0;
    }
    
  2. Drücken Sie einmal F5 . Die Programmausführung wird fortgesetzt, bis sie angehalten werden muss, um Benutzereingaben zu bitten. Geben Sie erneut ein 10 / 0 . Jetzt wird eine hilfreichere Nachricht gedruckt. Der Benutzer wird um mehr Eingabe gebeten, und das Programm wird weiterhin normal ausgeführt.

    Video der Debugkonsole mit dem Endergebnis nach Codeänderungen. 10 /0 wird eingegeben, und das Programm zeigt

    Hinweis

    Wenn Sie Code im Debugmodus bearbeiten, besteht das Risiko, dass Code veraltet wird. Dies geschieht, wenn der Debugger weiterhin Ihren alten Code ausführt und ihn noch nicht mit Ihren Änderungen aktualisiert hat. Der Debugger öffnet ein Dialogfeld, um Sie darüber zu informieren, wann dies geschieht. Manchmal müssen Sie möglicherweise F5 drücken, um den ausgeführten Code zu aktualisieren. Wenn Sie eine Änderung innerhalb einer Funktion vornehmen, während sich der Ausführungspunkt innerhalb dieser Funktion befindet, treten Sie aus der Funktion heraus, und kehren Sie dann erneut in die Funktion ein, um den aktualisierten Code abzurufen. Wenn dies aus irgendeinem Grund nicht funktioniert und eine Fehlermeldung angezeigt wird, können Sie das Debuggen beenden, indem Sie auf das rote Quadrat in der Symbolleiste unter den Menüs oben in der IDE klicken und dann das Debuggen erneut starten, indem Sie F5 eingeben oder den grünen "Wiedergabe"-Pfeil neben der Stoppschaltfläche auf der Symbolleiste auswählen.

    Ein weiterer Grund, warum 'Bearbeiten und Fortfahren' fehlschlagen kann, besteht darin, dass Sie zum Hauptmenü wechseln und 'Extras' sowie 'Optionen', 'Debuggen' und 'Allgemein' auswählen müssen und sicherstellen, dass die Option 'Quelldateien müssen genau mit der ursprünglichen Version übereinstimmen' aktiviert ist.

    Grundlegendes zu den Verknüpfungen "Ausführen" und "Debuggen"

    • F5 oder Debuggen>starten Sie das Debuggen, startet eine Debugsitzung, wenn eine noch nicht aktiv ist, und führt das Programm aus, bis ein Haltepunkt erreicht wird oder das Programm Benutzereingaben benötigt. Wenn keine Benutzereingabe erforderlich ist und kein Haltepunkt zum Drücken verfügbar ist, wird das Programm beendet, und das Konsolenfenster wird geschlossen, wenn die Ausführung des Programms abgeschlossen ist. Wenn Ihr Programm in die Konsole ausgibt, verwenden Sie STRG+F5; oder legen Sie einen Haltepunkt fest, bevor Sie F5 drücken, um das Fenster offen zu halten.
    • STRG+F5, oder Debug>Start ohne Debugging führt die Anwendung aus, ohne in den Debugmodus zu wechseln. Dies ist etwas schneller als das Debuggen, und das Konsolenfenster bleibt geöffnet, nachdem das Programm die Ausführung abgeschlossen hat.
    • Mit F10, der als "Step Over" bezeichnet wird, können Sie Code, Zeile für Zeile durchlaufen und visualisieren, wie der Code ausgeführt wird und welche Variablenwerte bei jedem Ausführungsschritt vorliegen.
    • F11, bekannt als "Schritt in", funktioniert ähnlich wie "Step Over", mit der Ausnahme, dass er in allen Funktionen ausgeführt wird, die in der Ausführungszeile aufgerufen werden. Wenn beispielsweise die ausgeführte Zeile eine Funktion aufruft, verschiebt das Drücken von F11 den Mauszeiger in den Textkörper der Funktion, sodass Sie dem Code der Funktion folgen können, der ausgeführt wird, bevor Sie zur Zeile zurückkehren, an der Sie begonnen haben. Drücken von F10-Schritten über den Funktionsaufruf und wechselt einfach zur nächsten Zeile. Der Funktionsaufruf geschieht weiterhin, aber das Programm hält nicht an, um Ihnen zu zeigen, was sie tut.

Schließen der App

  • Wenn die Rechner-App noch läuft, schließen Sie das Konsolenfenster, um sie zu stoppen.

Die fertige App

Glückwunsch! Sie haben den Code für die Rechner-App fertiggestellt und in Visual Studio erstellt und debuggt.

Nächste Schritte

Weitere Informationen zu Visual Studio für C++