Создание консольного приложения "Калькулятор" на C++
Обычно программист C++ начинает с создания приложения "Hello, world!", которое запускается из командной строки. Начнем с этого в этой статье, а затем мы перейдем к чему-то более сложному: приложению калькулятора.
Необходимые компоненты
- Visual Studio с помощью рабочей нагрузки C++, установленной и работающей на компьютере. Чтобы установить его, см. раздел "Установка поддержки C++ в Visual Studio".
- В этом руководстве демонстрируется функция с именем редактирования и продолжения, которая позволяет вносить изменения в код во время работы приложения. Чтобы включить изменение и продолжить, в главном меню выберите пункт "Параметры>отладки> инструментов>" и убедитесь, что требуется, чтобы исходные файлы точно соответствовали исходной версии, проверка.
Создание проекта приложения
Visual Studio использует проекты для упорядочивания кода для приложения и решений для организации одного или нескольких проектов. Проект содержит все параметры, конфигурации и правила, используемые для создания приложения. Кроме того, он управляет связью между всеми файлами проекта и любыми внешними файлами. Чтобы создать приложение, сначала создайте проект и решение.
Запустите Visual Studio- появится диалоговое окно "Пуск Visual Studio". Выберите " Создать проект ", чтобы приступить к работе.
В диалоговом окне есть параметры клонирования репозитория, открытия проекта или решения, открытия локальной папки и создания нового проекта".
В списке шаблонов проектов выберите консольное приложение, а затем нажмите кнопку "Далее".
Внимание
Убедитесь, что выбрана версия C++ шаблона консольного приложения . Этот шаблон содержит теги C++, Windows и Консоль, а в углу значка есть "++".
В диалоговом окне "Настройка нового проекта" выберите текстовое поле "Имя проекта", назовите новый проект CalculatorTutorial, а затем нажмите кнопку "Создать".
Создается пустое консольное приложение C++ Windows Hello World. Консольные приложения используют окно консоли Windows для отображения выходных данных и приема данных, вводимых пользователем. В Visual Studio откроется окно редактора с созданным кодом.
// 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
Проверка сборки и выполнения нового приложения
Шаблон для нового консольного приложения Windows создает простое приложение Hello World на C++. На этом этапе вы можете видеть, как Visual Studio создает и запускает созданные вами приложения прямо из интегрированной среды разработки.
Чтобы создать проект, выберите "Создать решение " в меню "Сборка ". Окно Вывод отображает результаты процесса сборки.
Чтобы запустить код, в строке меню выберите "Отладка", "Пуск" без отладки (CTRL+F5).
Открывается окно консоли, и запускается ваше приложение.
При запуске консольного приложения в Visual Studio система выполняет код, а затем выводит сообщение "Нажмите любую клавишу, чтобы закрыть это окно. . .", чтобы вы могли просмотреть выходные данные.
Поздравляем! Вы создали свое первое консольное приложение "Hello, world!" в Visual Studio!
Нажмите любую клавишу, чтобы закрыть окно консоли и вернуться в редактор Visual Studio.
Теперь у вас есть средства для сборки и запуска приложения после каждого изменения, чтобы убедиться, что код по-прежнему работает должным образом. Позже мы покажем, как отладить его, если это не так.
Изменение кода
Теперь давайте изменим код в этом шаблоне, чтобы он был приложением калькулятора.
Замените содержимое
CalculatorTutorial.cpp
файла следующим кодом, чтобы он соответствовал этому примеру:// 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
Пояснения к коду:
- Операторы
#include
позволяют ссылаться на код, расположенный в других файлах. Иногда отображается имя файла, заключенное в угловые скобки (<>), а в других случаях — в кавычки (" "). В общем случае угловые скобки используются при ссылке на стандартную библиотеку C++, а кавычки — для других файлов. - Строка
using namespace std;
сообщает компилятору ожидать данные от стандартной библиотеки C++ для использования в этом файле. Без этой строки каждое ключевое слово из библиотеки должно быть предшествует дляstd::
обозначения область. Например, без этой строки каждую ссылку наcout
потребовалось бы записывать в видеstd::cout
. Операторusing
добавляется, чтобы сделать код более понятным. - Ключевое слово
cout
используется для вывода сведений в стандартный поток вывода в C++. Оператор << указывает компилятору отправить все содержимое справа от него в стандартный поток вывода. endl
Ключевое слово похож на клавишу ВВОД; она заканчивает линию и перемещает курсор на следующую строку. Рекомендуется поместить\n
внутри строки (содержащегося""
в) то же самое, потому чтоendl
всегда очищает буфер, который может повредить производительность программы. Но так как это очень небольшое приложение,endl
вместо этого используется для улучшения удобочитаемости.- Все операторы C++ должны заканчиваться точкой с запятой, а все приложения C++ — содержать функцию
main()
. Именно ее программа выполняет при запуске. Для использования весь код должен быть доступен изmain()
.
- Операторы
Чтобы сохранить файл, нажмите клавиши CTRL+S или щелкните значок "Сохранить " в верхней части интегрированной среды разработки, значок диска floppy на панели инструментов в строке меню.
Чтобы запустить приложение, нажмите клавиши CTRL+F5 или перейдите в меню отладки и нажмите кнопку "Пуск без отладки". Должно отобразится окно консоли с текстом, указанным в коде.
По завершении закройте окно консоли.
Добавление кода для выполнения математических операций
Класс подобен схеме для объекта, который выполняет какие-либо действия. В этом случае мы определим класс калькулятора для хранения математической логики.
Добавление класса Калькулятора
Перейдите в меню "Проект" и выберите " Добавить класс". В поле ввода Имя класса введите Calculator. Нажмите ОК.
Поле имени класса имеет значение калькулятора. Поле H-файла содержит Calculator.h. Поле файла .cpp содержит Calculator.cpp. Поле базового класса пусто. Другие варианты виртуального деструктора, встроенного и неуправляемого неуправляемые не проверка.
В проект будут добавлены два новых файла. Чтобы сохранить сразу все измененные файлы, нажмите клавиши CTRL+SHIFT+S. Это сочетание клавиш для команды Файл>Сохранить все. Кроме того, есть кнопка Сохранить все на панели инструментов. Она имеет вид значка с двумя дискетами рядом с кнопкой Сохранить. В общем случае рекомендуется регулярно нажимать кнопку Сохранить все, чтобы не пропустить никакие файлы при сохранении.
Мастер добавления классов создает
.h
и файлы с тем же именем, что и.cpp
класс. Вы можете просмотреть полный список файлов проекта в окне обозревателя решений, отображаемом в боковой части окна IDE. Если окно не отображается, его можно открыть в строке меню: выберите Вид> Обозреватель решений.В проекте учебника калькулятора есть узел файлов заголовков, содержащий Calculator.h. Узел исходных файлов содержит Calculator.cpp и CalculatorTutorial.cpp. Узлы для ссылок, внешних зависимостей и файлов ресурсов видимы, но закрыты.
Файл можно открыть, дважды щелкнув его в окне Обозреватель решений. Дважды щелкните
Calculator.h
его, чтобы открыть его.Замените содержимое
Calculator.h
следующим кодом, чтобы файл выглядел следующим образом:#pragma once class Calculator { public: double Calculate(double x, char oper, double y); };
Основные сведения о коде
- Этот код объявляет новую функцию , которая
Calculate
используется для выполнения математических операций для добавления, вычитания, умножения и деления. - Код C++ организован в файлы заголовков и
.h
исходные (.cpp
файлы). Различные компиляторы поддерживают несколько других расширений имени файла, но это основные, о которых вам нужно знать. Функции и переменные обычно объявляются, то есть получают имя и тип, в файлах заголовка, и реализуются, то есть получают определение, в исходных файлах. Для доступа к коду, определенному в другом файле, можно использовать#include "filename.h"
имя файла,filename.h
объявляющего переменные или функции, которые вы хотите использовать. - Рекомендуется упорядочивать код по различным файлам в зависимости от его назначения, чтобы позднее было проще найти нужный код. В данном случае мы определяем класс
Calculator
отдельно от файла, содержащего функциюmain()
, но планируем ссылаться на классCalculator
вmain()
.
- Этот код объявляет новую функцию , которая
Зеленый волнистый элемент отображается под
Calculate
тем, что, хотяCalculate
функция объявлена, она не определена.Calculate
Наведите указатель мыши, щелкните стрелку вниз на появившемся отвертке и выберите "Создать определение" вCalculator.cpp
.Этот код добавляется в
Calculator.cpp
:Определение конструктора: double Calculator::Calculate(double x, char oper, double y) { return 0,0; }
Сейчас он возвращает просто 0.0. Давайте изменим это.
Переключитесь в
Calculator.cpp
файл в окне редактора. Замените содержимоеCalculator::Calculate(double x, char oper, double y)
на: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; } }
Основные сведения о коде
- Функция
Calculate
использует число, оператор и второе число, а затем выполняет запрошенную операцию над этими числами. - Оператор switch проверяет, какой оператор был предоставлен, и выполняет только вариант (case), соответствующий этой операции. Вариант default: является резервным на тот случай, если пользователь вводит неприемлемый оператор, чтобы программа не прервала работу. В общем случае лучше обрабатывать некорректный ввод данных пользователем более элегантным способом, но это выходит за рамки данного руководства.
- Ключевое слово
double
обозначает тип числа, который поддерживает десятичные числа. Таким образом, калькулятор может выполнять математические операции с десятичными и целыми числами. ФункцияCalculate
должна всегда возвращать такое число из-за типаdouble
в самом начале кода (обозначает возвращаемый тип функции), поэтому даже в случае по умолчанию возвращается значение 0,0. - Файл
.h
объявляет прототип функции, который сообщает компилятору заранее, какие параметры он требует, и какой тип возвращаемого значения следует ожидать от него. Файл.cpp
содержит все сведения о реализации функции.
- Функция
Если вы создадите и снова запустите код на этом этапе, он немедленно завершится после запроса выполнения операции. Таким образом, измените функцию для выполнения нескольких вычислений main
.
Calculator
Вызов функций-членов класса
Обновите функцию
main
CalculatorTutorial.cpp
следующим образом:// 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; }
Основные сведения о коде
- Так как программы C++ всегда запускаются с функции
main()
, нам нужно вызвать из нее другой, для чего нужен оператор#include
. - Объявлены начальные переменные
x
,y
,oper
иresult
для хранения, соответственно, первого числа, второго числа, оператора и окончательного результата. Всегда рекомендуется дать им некоторые начальные значения, чтобы избежать неопределенного поведения, что делается здесь. - Строка
Calculator c;
объявляет объект "c" в качестве экземпляра классаCalculator
. Сам класс является лишь схемой для описания работы калькуляторов, а объект — это конкретный калькулятор, который выполняет вычисления. - Оператор
while (true)
является циклом. Код внутри этого цикла продолжает выполняться снова и снова, пока выполняется условие в()
. Так как условие просто указано какtrue
, оно всегда выполняется, поэтому цикл выполняется бесконечно. Чтобы закрыть программу, пользователю нужно вручную закрыть окно консоли. В противном случае программа будет постоянно ожидать новые входные данные. - Ключевое слово
cin
используется для получения входных данных от пользователя. Этот входной поток способен обработать строку текста, введенного в окне консоли, и поместить ее внутрь каждой из перечисленных переменных в указанном порядке, при условии, что введенные пользователем данные соответствуют требуемой спецификации. Эту строку можно изменить, чтобы принять различные типы входных данных, например более двух чисел, хотяCalculate()
для обработки этой функции также потребуется обновить функцию. - Выражение
c.Calculate(x, oper, y);
вызывает определенную ранее функциюCalculate
и предоставляет введенные входные значения. Затем она возвращает число, сохраняемое вresult
. - Наконец, в консоль выводится
result
, благодаря чему пользователь видит результат вычисления.
- Так как программы C++ всегда запускаются с функции
Повторная сборка и проверка кода
Теперь протестируйте программу еще раз, чтобы убедиться, что все работает правильно.
Нажмите клавиши CTRL+F5, чтобы перестроить и запустить приложение.
Введите
5+5
и нажмите клавишу ВВОД. Убедитесь, что выводится результат 10.Приложение выводит сообщение: введите операцию для выполнения. Формат: a+b | a-b | a*b | a/b. Пользователь ввел 5+5. Выходные данные приложения: результат 5+5: 10
Отладка приложения
Так как пользователь может вводить что-либо в окно консоли, давайте убедимся, что калькулятор обрабатывает непредвиденные входные данные. Вместо запуска программы давайте отладим его, чтобы мы могли проверить, что он делает пошаговые действия.
Запуск приложения в отладчике
Введите
CalcuatorTutorial.cpp
точку останова в строке:result = c.Calculate(x, oper, y);
Чтобы задать точку останова, щелкните рядом со строкой серую вертикальную панель, идущую вдоль левой части окна редактора. Появится красная точка.Теперь при отладке программы выполнение приостанавливается в этой строке. Мы уже имеем примерное представление о том, что в простых случаях программа работает. Так как мы не хотим приостанавливать выполнение при каждом вызове
Calculate()
, давайте сделаем точку останова условной.Щелкните правой кнопкой мыши красную точку, представляющую точку останова, и выберите "Условия". В поле ввода для условия введите
(y == 0) && (oper == '/')
. Нажмите кнопку "Закрыть", чтобы сохранить условие точки останова.Условие точки останова: y==0 &&oper == '/' True.
Теперь выполнение приостанавливается в точке останова, когда приложение пытается разделить на 0.
Чтобы выполнить отладку программы, нажмите клавишу F5 или нажмите кнопку панели инструментов локального отладчика Windows, которая имеет зеленый значок со стрелкой. Если ввести в консольном приложении нечто вроде "5 - 0", программа работает как обычно и продолжает выполнение. Но если ввести "10 / 0", она приостанавливает выполнение в точке останова. Можно поместить любое количество пробелов между оператором и числами:
cin
достаточно умным, чтобы проанализировать входные данные соответствующим образом.
Полезные окна в отладчике
При отладке кода могут появиться некоторые новые окна. Они могут оказаться полезными в процессе отладки. Давайте рассмотрим окно Видимые. Окно Видимые содержит текущие значения переменных, используемых по меньшей мере за три строки перед текущей строкой.
Значение операции равно 47 '/', результат равен 5, x равно 10, а y — 0.
Чтобы просмотреть все переменные из этой функции, переключитесь в окно Локальные. Вы можете изменить значения этих переменных во время отладки, чтобы узнать, какой эффект они будут иметь в программе. В этом случае мы оставим их в одиночку.
Значение операции равно 47 "/", результат равен 0, x равно 10, а y — 0.
Вы также можете навести указатель мыши на переменные в коде, чтобы увидеть текущие значения в точке приостановки выполнения. Сначала щелкните окно редактора, чтобы сделать его активным.
Продолжение отладки
Желтая стрелка слева показывает текущую точку выполнения. Текущая строка вызывает
Calculate
, поэтому нажмите клавишу F11, чтобы выполнить Шаг с заходом для этой функции. Теперь вы выполняете код в текстеCalculate
функции. Будьте осторожны с шагом В , так как он выполняет шаги в любых функциях в строке, в которую вы находитесь, включая стандартные функции библиотеки. Это хорошо, чтобы перейти в стандартную библиотеку, но вы можете быть более заинтересованы в фокусе на коде вместо кода библиотеки.Теперь, когда точка выполнения находится в начале функции
Calculate
, нажмите клавишу F10 для перехода на следующую строку в рамках выполнения программы. При нажатии клавиши F10 активируется функция Шаг с обходом. Шаг с обходом можно использовать для перемещения по строкам, не вдаваясь в подробности того, что происходит в каждой части строки. В общем случае следует использовать шаг "Сверху", а не "Шаг в", если вы не хотите более глубоко изучить код, вызываемый из другого места (так как вы сделали, чтобы достичь текстаCalculate
).Продолжайте использовать клавишу F10, чтобы выполнять Шаг с обходом для каждой строки, пока не вернетесь к функции
main()
в другом файле, и остановитесь на строкеcout
.Программа делает то, что ожидается: он принимает первое число и делит его на второй. В строке
cout
наведите указатель мыши на переменнуюresult
или взгляните наresult
в окне Видимые. Его значениеinf
, которое не выглядит правильно, поэтому давайте исправим его. В строкеcout
просто выводится любое значение, хранящееся вresult
. Поэтому при продвижении еще на один шаг с помощью клавиши F10 в окне консоли отображается следующее:Выходные данные приложения: введите операцию для выполнения. Формат: a+b | a-b | a*b | a/b. Пользователь ввел 5-0. Результат приложения: 5. Пользователь THe ввел 10/0. Выходные данные приложения: результат: inf
Этот результат обусловлен тем, что деление по нулю не определено, поэтому программа не имеет числового ответа на запрошенную операцию.
Исправление ошибки деления на ноль
Давайте обработаем деление на ноль более корректно, чтобы пользователю было проще понять проблему.
Внесите следующие изменения в
CalculatorTutorial.cpp
. (Вы можете оставить программу запущенной при редактировании, благодаря функции отладчика, называемой функцией отладчика.Изменить и продолжить). Добавьте следующуюif
cin >> x >> oper >> y;
инструкцию, чтобы проверка деления на ноль и вывести сообщение пользователю, если это произойдет. В противном случае результат выводится.// 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 << "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; }
Один раз нажмите клавишу F5 . При этом выполнение программы продолжается вплоть до приостановки для запроса данных, вводимых пользователем. Снова введите
10 / 0
. Теперь выводится более информативное сообщение. У пользователя запрашиваются дополнительные входные данные, и программа продолжает выполнение в обычном режиме.В окне консоли отображаются две строки: 10 /0 Результат: inf, а затем 10 /0 Математические ошибки: попытка разделить на ноль.
Примечание.
При редактировании кода в режиме отладки существует риск того, что код устареет. Это происходит, когда отладчик продолжает выполнять старый код, не учитывающий внесенные вами изменения. Отладчик отображает диалоговое окно, чтобы сообщить вам, когда это произойдет. В некоторых случаях может потребоваться нажать клавишу F5, чтобы обновить выполняемый код. В частности, если вы вносите изменения внутри функции, пока точка выполнения находится внутри этой функции, необходимо выйти из функции, а затем вернуться в нее еще раз, чтобы получить обновленный код. Если это не работает, и вы видите сообщение об ошибке, можно остановить отладку, щелкнув красный квадрат на панели инструментов в верхней части интегрированной среды разработки, а затем снова начать отладку, введя F5 или выбрав зеленую стрелку воспроизведения рядом с кнопкой остановки на панели инструментов.
Другая причина изменения и продолжения может завершиться ошибкой, если появится сообщение "Требовать исходные файлы для точного сопоставления исходного параметра версии в разделе "Параметры отладки>"> необходимо включить..." Чтобы устранить эту проблему, в главном меню выберите пункт "Параметры>отладки> инструментов>" и убедитесь, что требуется, чтобы исходные файлы точно соответствовали исходной версии, проверка.
Пояснения по сочетаниям клавиш для выполнения и отладки
- Клавиша F5 (или команда Отладка>Запустить отладку) запускает сеанс отладки, если он еще не активен, и выполняет программу до тех пор, пока не будет встречена точка останова либо программе не потребуются вводимые пользователем данные. Если вводимые пользователем данные не требуются и точка останова отсутствует, программа завершает работу, а окно консоли автоматически закрывается после завершения выполнения программы. Если у вас есть что-то похожее на программу Hello World, используйте ctrl+F5 или установите точку останова перед нажатием клавиши F5 , чтобы сохранить окно открытым.
- Сочетание клавиш CTRL+F5 (или команда Отладка>Запуск без отладки) запускает приложение без перехода в режим отладки. Это немного быстрее отладки, а окно консоли остается открытым после завершения выполнения программы.
- Клавиша F10 (соответствующая возможности Шаг с обходом) позволяет выполнять построчную итерацию по коду, а также визуализировать выполнение кода и значения переменных на каждом шаге выполнения.
- Клавиша F11 (соответствующая возможности Шаг с заходом) работает аналогично возможности Шаг с обходом, за исключением того, что заходит в любые функции, вызываемые в строке выполнения. Например, если в выполняемой строке вызывается функция, при нажатии клавиши F11 указатель перемещается в тело функции, чтобы вы могли проследить выполнение кода функции, прежде чем вернуться на исходную строку. При нажатии клавиши F10 выполняется шаг с обходом по вызову функции и простой переход на следующую строку. Вызов функции все равно выполняется, но программа не приостанавливается, чтобы показать вам, что именно она делает.
Закрытие приложения
- Если оно все еще выполняется, закройте окно консоли для приложения калькулятора.
Добавление системы управления исходным кодом Git
Теперь, когда вы создали приложение, вы можете добавить его в репозиторий Git. Все предусмотрено. Visual Studio упрощает этот процесс с помощью инструментов Git, которые вы можете использовать непосредственно из IDE.
Совет
Git — это наиболее широко используемая современная система контроля версий, поэтому, независимо от того, являетесь ли вы профессиональным разработчиком или учитесь программировать, Git может быть для вас весьма полезным. Если вы новичок в Git, вы можете начать с сайта https://git-scm.com/. Там вы найдете памятки, популярную электронную книгу и видеоматериалы по основам GIT.
Чтобы связать свой код с Git, вы начинаете с создания нового репозитория Git, в котором находится ваш код. Это делается следующим образом:
В строке состояния в правом нижнем углу Visual Studio нажмите Добавить в систему управления версиями и выберите Git.
В диалоговом окне Создать репозиторий Git войдите в GitHub.
Имя репозитория заполняется автоматически в зависимости от расположения вашей папки. По умолчанию ваш новый репозиторий является частным. Это означает, что только вы можете получить к нему доступ.
Совет
Независимо от того, является ли ваш репозиторий общедоступным или частным, лучше всего иметь удаленную резервную копию кода, надежно хранящуюся на GitHub. Даже если вы не работаете с командой, удаленный репозиторий позволит получать доступ к коду с любого компьютера.
Щелкните Создать и отправить.
После создания репозитория в строке состояния появятся сведения о состоянии.
Первый значок со стрелками показывает, сколько исходящих и входящих фиксаций в вашей текущей ветке. Вы можете использовать этот значок, чтобы получать любые входящие или исходящие фиксации. Вы также можете выбрать отображение этих фиксаций в первую очередь. Для этого щелкните значок и выберите Просмотреть исходящие/входящие.
Второй значок с карандашом показывает количество незафиксированных изменений в вашем коде. Щелкните этот значок, чтобы просмотреть эти изменения в окне Git Changes.
Чтобы узнать больше о том, как использовать Git с вашим приложением, см. документацию по управлению версиями Visual Studio.
Готовое приложение
Поздравляем! Вы завершили код для приложения калькулятора, создали и отладили его и добавили его в репозиторий, все в Visual Studio.
Следующие шаги
Обычно программист C++ начинает с создания приложения "Hello, world!", которое запускается из командной строки. Начнем с этого в этой статье, а затем мы переходим к чему-то более сложному: приложению калькулятора.
Необходимые компоненты
- Visual Studio с помощью рабочей нагрузки C++, установленной и работающей на компьютере. Чтобы установить его, см. раздел "Установка поддержки C++ в Visual Studio".
Создание проекта приложения
Visual Studio использует проекты для упорядочивания кода для приложения и решений для организации одного или нескольких проектов. Проект содержит все параметры, конфигурации и правила, используемые для создания приложения. Кроме того, он управляет связью между всеми файлами проекта и любыми внешними файлами. Чтобы создать приложение, сначала создайте проект и решение.
На панели меню в Visual Studio выберите "Файл>нового>проекта". Открывается окно Новый проект.
На боковой панели слева выберите Visual C++. В центре выберите консольное приложение Windows.
В текстовом поле "Имя" внизу назовите новый проект CalculatorTutorial, а затем нажмите кнопку "ОК".
Создается пустое консольное приложение C++ Windows Hello World. Консольные приложения используют окно консоли Windows для отображения выходных данных и приема данных, вводимых пользователем. В Visual Studio откроется окно редактора с созданным кодом.
// 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
Проверка сборки и выполнения нового приложения
Шаблон для нового консольного приложения Windows создает простое приложение "Hello World" на C++. На этом этапе вы можете видеть, как Visual Studio создает и запускает созданные вами приложения прямо из интегрированной среды разработки.
Чтобы создать проект, выберите "Создать решение " в меню "Сборка ". Окно Вывод отображает результаты процесса сборки.
Чтобы запустить код, в строке меню выберите "Отладка", "Пуск" без отладки (CTRL+F5).
Открывается окно консоли, и запускается ваше приложение.
При запуске консольного приложения в Visual Studio система выполняет код, а затем выводит сообщение "Нажмите любую клавишу, чтобы закрыть это окно. . .", чтобы вы могли просмотреть выходные данные.
Поздравляем! Вы создали свое первое консольное приложение "Hello, world!" в Visual Studio!
Нажмите любую клавишу, чтобы закрыть окно консоли и вернуться в редактор Visual Studio.
Теперь у вас есть средства для сборки и запуска приложения после каждого изменения, чтобы убедиться, что код по-прежнему работает должным образом. Позже мы покажем, как отладить его, если это не так.
Изменение кода
Теперь давайте повернем код в этом шаблоне, чтобы стать приложением калькулятора.
Замените содержимое
CalculatorTutorial.cpp
файла следующим кодом, чтобы он соответствовал этому примеру:// 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
Пояснения к коду:
- Операторы
#include
позволяют ссылаться на код, расположенный в других файлах. Иногда отображается имя файла, заключенное в угловые скобки (<>), а в других случаях — в кавычки (" "). В общем случае угловые скобки используются при ссылке на стандартную библиотеку C++, а кавычки — для других файлов. - Строка
using namespace std;
сообщает компилятору ожидать данные от стандартной библиотеки C++ для использования в этом файле. Без этой строки каждое ключевое слово из библиотеки должно быть предшествует дляstd::
обозначения область. Например, без этой строки каждую ссылку наcout
потребовалось бы записывать в видеstd::cout
. Операторusing
добавляется, чтобы сделать код более понятным. - Ключевое слово
cout
используется для вывода сведений в стандартный поток вывода в C++. Оператор *<<
сообщает компилятору отправлять все данные справа от него в стандартные выходные данные. endl
Ключевое слово похож на клавишу ВВОД; она заканчивает линию и перемещает курсор на следующую строку. Лучше поставить\n
внутри строки (содержащейся""
) сделать то же самое, потому чтоendl
всегда очищает буфер и может повредить производительность программы. Но так как это очень небольшое приложение,endl
вместо этого используется для улучшения удобочитаемости.- Все операторы C++ должны заканчиваться точкой с запятой, а все приложения C++ — содержать функцию
main()
. Именно ее программа выполняет при запуске. Для использования весь код должен быть доступен изmain()
.
- Операторы
Чтобы сохранить файл, нажмите клавиши CTRL+S или щелкните значок "Сохранить " в верхней части интегрированной среды разработки, значок диска floppy на панели инструментов в строке меню.
Чтобы запустить приложение, нажмите клавиши CTRL+F5 или перейдите в меню отладки и нажмите кнопку "Пуск без отладки". Если появится всплывающее окно с сообщением о том, что проект устарел, можно снова выбрать "Не показывать это диалоговое окно", а затем нажмите кнопку "Да", чтобы создать приложение. Должно отобразится окно консоли с текстом, указанным в коде.
Сначала появится диалоговое окно с запросом на сборку, так как проект устарел. Установлен флажок "Больше не показывать это окно". Выбран вариант "Да" для запуска сборки проекта, выполняется сборка проекта калькулятора, который затем запускается в окне консоли Windows.
По завершении закройте окно консоли.
Добавление кода для выполнения математических операций
Класс подобен схеме для объекта, который выполняет какие-либо действия. В этом случае мы определим класс калькулятора для хранения математической логики.
Добавление класса Калькулятора
Перейдите в меню "Проект" и выберите " Добавить класс". В поле ввода Имя класса введите Calculator. Нажмите ОК.
Класс подобен схеме для объекта, который выполняет какие-либо действия. В этом случае мы определяем калькулятор и особенности его работы.
В проект будут добавлены два новых файла. Чтобы сохранить сразу все измененные файлы, нажмите клавиши CTRL+SHIFT+S. Это сочетание клавиш для команды Файл>Сохранить все. Кроме того, есть кнопка Сохранить все на панели инструментов. Она имеет вид значка с двумя дискетами рядом с кнопкой Сохранить. В общем случае рекомендуется регулярно нажимать кнопку Сохранить все, чтобы не пропустить никакие файлы при сохранении.
Мастер добавления классов создает
.h
и файлы с тем же именем, что и.cpp
класс. Вы можете просмотреть полный список файлов проекта в окне обозревателя решений, отображаемом в боковой части окна IDE. Если окно не отображается, его можно открыть в строке меню: выберите Вид> Обозреватель решений.В проекте учебника калькулятора есть узел файлов заголовков, содержащий Calculator.h, stdafx.h и targetver.h. Узел исходных файлов содержит Calculator.cpp, CalculatorTutorial.cpp и stdafx.cpp. Узлы для ссылок, внешних зависимостей и файлов ресурсов видимы, но закрыты.
Файл можно открыть, дважды щелкнув его в окне Обозреватель решений. Дважды щелкните
Calculator.h
его, чтобы открыть его.Замените содержимое
Calculator.h
следующим кодом, чтобы файл выглядел следующим образом:#pragma once class Calculator { public: double Calculate(double x, char oper, double y); };
Основные сведения о коде
- Этот код объявляет новую функцию , которая
Calculate
используется для выполнения математических операций для добавления, вычитания, умножения и деления. - Код C++ организован в файлы заголовков и
.h
исходные (.cpp
файлы). Различные компиляторы поддерживают несколько других расширений имени файла, но это основные, о которых вам нужно знать. Функции и переменные обычно объявляются, то есть получают имя и тип, в файлах заголовка, и реализуются, то есть получают определение, в исходных файлах. Для доступа к коду, определенному в другом файле, можно использовать#include "filename.h"
имя файла,filename.h
объявляющего переменные или функции, которые вы хотите использовать. - Рекомендуется упорядочивать код по различным файлам в зависимости от его назначения, чтобы позднее было проще найти нужный код. В данном случае мы определяем класс
Calculator
отдельно от файла, содержащего функциюmain()
, но планируем ссылаться на классCalculator
вmain()
.
- Этот код объявляет новую функцию , которая
Зеленый волнистый элемент отображается под
Calculate
тем, что, хотяCalculate
функция объявлена, она не определена.Calculate
Наведите указатель мыши, щелкните стрелку вниз на появившемся отвертке и выберите "Создать определение" вCalculator.cpp
. Отображается всплывающее окно, сообщающее об изменении кода, внесенном в другом файле. Код был добавлен вCalculator.cpp
.Сейчас он возвращает просто 0.0. Давайте изменим это. Нажмите клавишу ESC, чтобы закрыть всплывающее окно.
Переключитесь в
Calculator.cpp
файл в окне редактора. Замените содержимое файла следующим кодом:#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; } }
Основные сведения о коде
- Функция
Calculate
использует число, оператор и второе число, а затем выполняет запрошенную операцию над этими числами. - Оператор switch проверяет, какой оператор был предоставлен, и выполняет только вариант (case), соответствующий этой операции. Вариант default: является резервным на тот случай, если пользователь вводит неприемлемый оператор, чтобы программа не прервала работу. В общем случае лучше обрабатывать некорректный ввод данных пользователем более элегантным способом, но это выходит за рамки данного руководства.
- Ключевое слово
double
обозначает тип числа, который поддерживает десятичные числа. Таким образом, калькулятор может выполнять математические операции с десятичными и целыми числами. ФункцияCalculate
должна всегда возвращать такое число из-за типаdouble
в самом начале кода (обозначает возвращаемый тип функции), поэтому даже в случае по умолчанию возвращается значение 0,0. - Файл
.h
объявляет прототип функции, который сообщает компилятору заранее, какие параметры он требует, и какой тип возвращаемого значения следует ожидать от него. Файл.cpp
содержит все сведения о реализации функции.
- Функция
Если построить и запустить код еще раз на этом этапе, он по-прежнему завершит работу после запроса операции для выполнения. Затем измените функцию main
, чтобы выполнить некоторые вычисления.
Вызов функций-членов класса Калькулятора
Теперь давайте обновим функцию
main
вCalculatorTutorial.cpp
:// 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; }
Основные сведения о коде
- Так как программы C++ всегда запускаются с функции
main()
, нам нужно вызвать из нее другой, для чего нужен оператор#include
. - Объявлены начальные переменные
x
,y
,oper
иresult
для хранения, соответственно, первого числа, второго числа, оператора и окончательного результата. Всегда рекомендуется дать им некоторые начальные значения, чтобы избежать неопределенного поведения, что делается здесь. - Строка
Calculator c;
объявляет объект "c" в качестве экземпляра классаCalculator
. Сам класс является лишь схемой для описания работы калькуляторов, а объект — это конкретный калькулятор, который выполняет вычисления. - Оператор
while (true)
является циклом. Код внутри этого цикла продолжает выполняться снова и снова, пока выполняется условие в()
. Так как условие просто указано какtrue
, оно всегда выполняется, поэтому цикл выполняется бесконечно. Чтобы закрыть программу, пользователю нужно вручную закрыть окно консоли. В противном случае программа будет постоянно ожидать новые входные данные. - Ключевое слово
cin
используется для получения входных данных от пользователя. Этот входной поток способен обработать строку текста, введенного в окне консоли, и поместить ее внутрь каждой из перечисленных переменных в указанном порядке, при условии, что введенные пользователем данные соответствуют требуемой спецификации. Эту строку можно изменить, чтобы принять различные типы входных данных, например более двух чисел, хотяCalculate()
для обработки этой функции также потребуется обновить функцию. - Выражение
c.Calculate(x, oper, y);
вызывает определенную ранее функциюCalculate
и предоставляет введенные входные значения. Затем она возвращает число, сохраняемое вresult
. - Наконец, в консоль выводится
result
, благодаря чему пользователь видит результат вычисления.
- Так как программы C++ всегда запускаются с функции
Повторная сборка и проверка кода
Проверьте программу еще раз, чтобы убедиться, что все работает правильно.
Нажмите клавиши CTRL+F5, чтобы перестроить и запустить приложение.
Введите
5+5
и нажмите клавишу ВВОД. Убедитесь, что выводится результат 10.
Отладка приложения
Так как пользователь может вводить что-либо в окно консоли, давайте убедимся, что калькулятор обрабатывает непредвиденные входные данные. Вместо запуска программы давайте отладим его, чтобы мы могли проверить, что делается пошаговые инструкции.
Запуск приложения в отладчике
Введите
CalcuatorTutorial.cpp
точку останова в строкеresult = c.Calculate(x, oper, y);
. Чтобы задать точку останова, щелкните рядом со строкой серую вертикальную панель, идущую вдоль левой части окна редактора. Появится красная точка.Теперь при отладке программа всегда приостанавливает выполнение на этой строке. Мы уже имеем примерное представление о том, что в простых случаях программа работает. Так как нам не нужно приостанавливать выполнение при каждом запуске, создадим условную точку останова.
Щелкните правой кнопкой мыши красную точку, представляющую точку останова, и выберите "Условия". В поле ввода для условия введите
(y == 0) && (oper == '/')
. Нажмите кнопку "Закрыть" при сохранении условия точки останова.Точка останова находится в строке: результат = точка вычислений (x, oper, y). "Условия..." выбран в раскрывающемся списке точки останова, в котором открывается окно параметров точки останова. Параметр условия проверка под раскрывающимся списком: "Условное выражение" и "Значение true". Пользователь вводит y == 0 && oper == '= '/' в текстовое поле условия, а затем выбирает близко, чтобы задать условную точку останова.
Теперь выполнение приостанавливается в точке останова, в частности при попытке деления на 0.
Чтобы выполнить отладку программы, нажмите клавишу F5 или нажмите кнопку панели инструментов локального отладчика Windows, которая имеет зеленый значок со стрелкой. Если ввести в консольном приложении нечто вроде "5 - 0", программа работает как обычно и продолжает выполнение. Но если ввести "10 / 0", она приостанавливает выполнение в точке останова. Вы можете ввести любое число пробелов между оператором и числами; функция
cin
достаточно интеллектуальна для того, чтобы правильно проанализировать входные данные.Пользователь вводит значение 5 – 0. Выходные данные приложения: результат — 5. Затем пользователь вводит значение 10/0 и, поскольку условие условной точки останова выполняется, выполнение останавливается в строке: результат = c.Calculate(x, oper, y);
Полезные окна в отладчике
При отладке кода могут появиться некоторые новые окна. Они могут оказаться полезными в процессе отладки. Давайте рассмотрим окно Видимые. Окно Видимые содержит текущие значения переменных, используемых по меньшей мере за три строки перед текущей строкой.
Значение операции равно 47 '/', результат равен 5, x равно 10, а y — 0.
Чтобы просмотреть все переменные из этой функции, переключитесь в окно Локальные. Вы можете изменить значения этих переменных во время отладки, чтобы узнать, какой эффект они будут иметь в программе. В этом случае мы оставим их в одиночку.
Значение операции равно 47 "/", результат равен 0, x равно 10, а y — 0.
Вы также можете навести указатель мыши на переменные в самом коде, чтобы увидеть текущие значения, в которых выполнение в настоящее время приостановлено. Сначала щелкните окно редактора, чтобы сделать его активным.
Продолжение отладки
Желтая стрелка слева показывает текущую точку выполнения. Текущие вызовы
Calculate
строк, поэтому нажмите клавишу F11 на шаг в функцию, которая принимает вас в текстCalculate
функции. Будьте осторожны с шагом В , так как он выполняет шаги в любых функциях в строке, в которую вы находитесь, включая стандартные функции библиотеки. Это хорошо, чтобы перейти в стандартную библиотеку, но вы можете быть более заинтересованы в фокусе на коде вместо кода библиотеки.Теперь, когда точка выполнения находится в начале функции
Calculate
, нажмите клавишу F10 для перехода на следующую строку в рамках выполнения программы. При нажатии клавиши F10 активируется функция Шаг с обходом. Шаг с обходом можно использовать для перемещения по строкам, не вдаваясь в подробности того, что происходит в каждой части строки. В общем случае следует использовать Шаг с обходом, а не Шаг с заходом, если только вы не хотите подробно изучить код, вызываемый из другого расположения (как в случае с переходом к телу функцииCalculate
).Продолжайте использовать клавишу F10, чтобы выполнять Шаг с обходом для каждой строки, пока не вернетесь к функции
main()
в другом файле, и остановитесь на строкеcout
.Каждая строка кода в функции Calculate выполняется до тех пор, пока элемент управления не возвращается в основную функцию. Затем пользователь наведет указатель мыши на переменную с именем результата, чтобы увидеть его значение, равное inf".
Программа делает то, что ожидается: он принимает первое число и делит его на второй. В строке
cout
наведите указатель мыши на переменнуюresult
или взгляните наresult
в окне Видимые. Его значение —inf
это значение, которое не выглядит правильно, поэтому давайте исправим его. В строкеcout
просто выводится любое значение, хранящееся вresult
. Поэтому при продвижении еще на один шаг с помощью клавиши F10 в окне консоли отображается следующее:Выходные данные приложения: введите операцию для выполнения. Формат: a+b | a-b | a*b | a/b. Пользователь ввел 5-0. Результат приложения: 5. Пользователь THe ввел 10/0. Выходные данные приложения: результат: inf
Этот результат обусловлен тем, что деление по нулю не определено, поэтому программа не имеет числового ответа на запрошенную операцию.
Исправление ошибки деления на ноль
Давайте обработаем деление на ноль более корректно, чтобы пользователю было проще понять проблему.
Внесите следующие изменения в
CalculatorTutorial.cpp
. (Вы можете оставить программу запущенной при редактировании, благодаря функции отладчика, называемой функцией отладчика.Изменить и продолжить). Изменение заключается в добавлении инструкции, приведеннойif
нижеcin >> x >> oper >> y;
, чтобы проверка деления на ноль и выводить пользователю сообщение, если это произойдет. В противном случае результат выводится:// 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; }
Один раз нажмите клавишу F5 . При этом выполнение программы продолжается вплоть до приостановки для запроса данных, вводимых пользователем. Снова введите
10 / 0
. Теперь выводится более информативное сообщение. У пользователя запрашиваются дополнительные входные данные, и программа продолжает выполнение в обычном режиме.Примечание.
При редактировании кода в режиме отладки существует риск того, что код устареет. Это происходит, когда отладчик продолжает выполнять старый код, не учитывающий внесенные вами изменения. В подобной ситуации отладчик выводит диалоговое окно с соответствующим сообщением. В некоторых случаях может потребоваться нажать клавишу F5, чтобы обновить выполняемый код. В частности, если вы вносите изменения внутри функции, пока точка выполнения находится внутри этой функции, выходите из функции, а затем снова в нее, чтобы получить обновленный код. Если по какой-либо причине это не работает и вы видите сообщение об ошибке, можно остановить отладку, щелкнув красный квадрат на панели инструментов под меню в верхней части интегрированной среды разработки, а затем перезапустить отладку, нажав клавишу F5 или выбрав зеленую стрелку "воспроизведения" рядом с кнопкой остановки на панели инструментов.
Другая причина, по которой изменение и продолжение могут завершиться ошибкой, заключается в том, что необходимо перейти в главное меню и выбрать команду "Параметры>отладки>инструментов>" и убедиться, что требуется, чтобы исходные файлы точно соответствовали исходной версии, проверка.
Пояснения по сочетаниям клавиш для выполнения и отладки
- Клавиша F5 (или команда Отладка>Запустить отладку) запускает сеанс отладки, если он еще не активен, и выполняет программу до тех пор, пока не будет встречена точка останова либо программе не потребуются вводимые пользователем данные. Если вводимые пользователем данные не требуются и точка останова отсутствует, программа завершает работу, а окно консоли автоматически закрывается после завершения выполнения программы. Если у вас есть что-то похожее на программу Hello World, используйте ctrl+F5 или установите точку останова перед нажатием клавиши F5 , чтобы сохранить окно открытым.
- Сочетание клавиш CTRL+F5 (или команда Отладка>Запуск без отладки) запускает приложение без перехода в режим отладки. Это немного быстрее отладки, а окно консоли остается открытым после завершения выполнения программы.
- Клавиша F10 (соответствующая возможности Шаг с обходом) позволяет выполнять построчную итерацию по коду, а также визуализировать выполнение кода и значения переменных на каждом шаге выполнения.
- Клавиша F11 (соответствующая возможности Шаг с заходом) работает аналогично возможности Шаг с обходом, за исключением того, что заходит в любые функции, вызываемые в строке выполнения. Например, если в выполняемой строке вызывается функция, при нажатии клавиши F11 указатель перемещается в тело функции, чтобы вы могли проследить выполнение кода функции, прежде чем вернуться на исходную строку. При нажатии клавиши F10 выполняется шаг с обходом по вызову функции и простой переход на следующую строку. Вызов функции все равно выполняется, но программа не приостанавливается, чтобы показать вам, что именно она делает.
Закрытие приложения
- Если оно все еще выполняется, закройте окно консоли для приложения калькулятора.
Поздравляем! Вы завершили код для приложения калькулятора и создали и отладили его в Visual Studio.