- Калькулятор
- Методическая разработка по теме «Создание простого калькулятора в Windows Forms на С++ «
- Оставьте свой комментарий
- Подарочные сертификаты
- Создание консольного приложения «Калькулятор» на C++ Create a console calculator in C++
- Предварительные требования Prerequisites
- Создание проекта приложения Create your app project
- Проверка сборки и выполнения нового приложения Verify that your new app builds and runs
- Изменение кода Edit the code
- Добавление кода для выполнения математических операций Add code to do some math
- Добавление класса Calculator To add a Calculator class
- Вызов функций-членов класса Calculator To call the Calculator class member functions
- Повторная сборка и проверка кода Build and test the code again
- Отладка приложения Debug the app
- Запуск приложения в отладчике To run the app in the debugger
- Полезные окна в отладчике Useful windows in the debugger
- Продолжение отладки To continue debugging
- Исправление ошибки деления на ноль To fix the «divide by zero» error
- Закрытие приложения Close the app
- Готовое приложение The finished app
- Следующие шаги Next steps
- Предварительные требования Prerequisites
- Создание проекта приложения Create your app project
- Проверка сборки и выполнения нового приложения Verify that your new app builds and runs
- Изменение кода Edit the code
- Добавление кода для выполнения математических операций Add code to do some math
- Добавление класса Calculator To add a Calculator class
- Вызов функций-членов класса Calculator To call the Calculator class member functions
- Повторная сборка и проверка кода Build and test the code again
- Отладка приложения Debug the app
- Запуск приложения в отладчике To run the app in the debugger
- Полезные окна в отладчике Useful windows in the debugger
- Продолжение отладки To continue debugging
- Исправление ошибки деления на ноль To fix the «divide by zero» error
- Закрытие приложения Close the app
- Готовое приложение The finished app
Калькулятор
Реализовать на базе Windows Forms программу “Калькулятор”, в которой должны быть реализованы следующие функции (и соответствующие им кнопки):
Ввод цифр 1, 2, 3, 4, 5, 6, 7, 8, 9, 0. Ввод разделительной точки.
Стирание последней введенной цифры.
Стирание всех цифр.
Арифметические операции +, -, /, *.
Операции с памятью (записать текущее число в память, вывести текущее число из памяти, очистить память).
Обработку ошибок в программе реализовать с помощью блока try catch.
помогите доработать код(а именно как реализовать операции с памятью и обработку ошибок?)
Калькулятор
Нужно написать программу обычного калькулятора в C#.
Калькулятор
Добрый день, скажите пожалуйста, как можно сделать в калькуляторе подсчёт выражений, например.
Калькулятор СИ
На платной основе ищу человека, который сможет срочно доделать калькулятор в си исправив несколько.
Калькулятор
Вот моя реализация калькулятора , может кому понадобиться using System; using.
Вложения
SimpleCalc.zip (59.1 Кб, 121 просмотров) |
Тематические курсы и обучение профессиям онлайн Профессия С#-разработчик (Skillbox) Архитектор ПО (Skillbox) Профессия Тестировщик (Skillbox) |
три кнопки: MS (запись в память), MR (чтение из памяти), MC (очищение)
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.
калькулятор
в C# плохо пишу, но мне надо написать калькулятор. есть несколько вопросов. знаю, что это самая.
Калькулятор
Доброго времени суток, делаю калькулятор програмиста но столкнулся с проблемой как мне добавлять.
А-ля калькулятор
Спасайте, программисты! Как сделать так, чтобы в калькуляторе при получении результата, с ним.
Калькулятор
Ребят, помогите, плиз. Нужно написать калькулятор типа стандартного в Windows, предусмотреть.
Методическая разработка по теме «Создание простого калькулятора в Windows Forms на С++ «
Методическая разработка по теме
«Создание простого калькулятора на языке С#
с использованием технологии Windows Forms».
Дисциплина: Информационные технологии и платформы разработки информационных систем
Специальности технического профиля
Тип урока: практическая работа
Ход практической работы
Для создания графического проекта нам потребуется среда разработки Visual Studio. На компьютерах установлена версия Visual Studio 2013.
Логотипом и иконкой Visual Studio 2013 является символ, похожий на математический символ «бесконечность», но с неодинаковыми левой и правой частями, фиолетового цвета.
Щелкнув по этой иконке на панели инструментов, выполняем вход в Visual Studio 2013.
В результате сначала появляется вертикально расположенный баннер Visual Studio 2013 (черного цвета), а затем — стартовая страница
Создадим проект графического приложения.
Для этого выберете пункт Создать проект . После этого откроется диалоговое окно создания нового проекта:
В поле внизу задайте имя данному проекту – ProstoCalculator . Нажмите ОК.
После этого Visual Studio откроет наш проект с созданными по умолчанию файлами:
Большую часть пространства Visual Studio занимает графический дизайнер, который содержит форму будущего приложения. Пока она пуста и имеет только заголовок Form1. Справа находится окно файлов решения/проекта — Solution Explorer (Обозреватель решений). Там и находятся все связанные с нашим приложением файлы, в том числе файлы формы Form1.cs .
Внизу справа находится окно свойств — Properties. Так как в данный момент выбрана форма как элемент управления, то в этом поле отображаются свойства, связанные с формой.
Теперь найдем в этом окне свойство формы Text и изменим его значение на «Калькулятор»:
Далее расположите все нужные элементы на форме. Нам понадобятся три элемента TextBox и 4 кнопки – Button.
Для этого нажимаем Вид → Панель элементов:
Появляется Панель элементов , из которой будем брать необходимые элементы TextBox и Button простым перетаскиванием.
Устанавливаем их так, как показано на рисунке ниже и переименовываем кнопки в свойствах. Сделать это можно, выделив элемент:
Наш калькулятор основан на взаимодействии двух чисел, поэтому математические операции будут следующие:
Итак, после того, как с графическим оформлением закончено, приступаем к самому коду.
Для всех вышеописанных операций (Сложение, Вычитание, Умножение, Деление) мы должны создать отдельные функции. Функции – это подпрограммы в самой программе, выполняющие отдельные задачи. Они помогают сократить и облегчить код.
Вот так будут выглядеть функции сложения, вычитания, умножения и деления:
public static double sum(double a, double b)
public static double razn(double a, double b)
public static double umnog(double a, double b)
public static double del(double a, double b)
Данный фрагмент кода помещаем на форму. Для этого выполним следующие действия:
Кликните в любое пустое место формы дважды, у вас появится окно с кодом, уже сформированным программой.
Мы дополним код, разместив наш фрагмент перед строчкой
private void button1_Click( object sender, EventArgs e)
У вас должно получиться:
Затем данные функции привязываем к кнопкам в форме.
Дважды щёлкаем мышью в форме на первую кнопку (Сложение).
Открывается та часть кода, которая отвечает за событие, которое произойдет, когда пользователь кликнет на данную кнопку. В теле этого события мы пишем:
private void button1_Click( object sender, EventArgs e)
textBox3.Text = Convert .ToString(sum( Convert .ToDouble(textBox1.Text), Convert .ToDouble(textBox2.Text)));
Нажимаем на кнопку 2 ( Вычитание ):
private void button2_Click( object sender, EventArgs e)
textBox3.Text = Convert .ToString(razn( Convert .ToDouble(textBox1.Text), Convert .ToDouble(textBox2.Text)));
Нажимаем на кнопку 3 ( Умножение ):
private void button3_Click(object sender, EventArgs e)
textBox3.Text = Convert.ToString(umnog(Convert.ToDouble(textBox1.Text), Convert.ToDouble(textBox2.Text)));
Нажимаем на кнопку 4 ( Деление ):
private void button4_Click(object sender, EventArgs e)
textBox3.Text = Convert.ToString(del(Convert.ToDouble(textBox1.Text), Convert.ToDouble(textBox2.Text)));
У вас должно получиться:
Вот и всё. Наш калькулятор готов!
Дальнейших успехов Вам!
Данная работа дает возможность в среде Microsoft Visual Studio с помощью Windows Forms создать простой калькулятор на языке С++.
Практическая работа предназначена для студентов колледжа 4 курса специальности «Информационные системы», изучающих дисциплину «Информационные технологии и платформы разработки информационных систем»
Номер материала: ДБ-550043
Не нашли то что искали?
Вам будут интересны эти курсы:
Оставьте свой комментарий
Подарочные сертификаты
Ответственность за разрешение любых спорных моментов, касающихся самих материалов и их содержания, берут на себя пользователи, разместившие материал на сайте. Однако администрация сайта готова оказать всяческую поддержку в решении любых вопросов, связанных с работой и содержанием сайта. Если Вы заметили, что на данном сайте незаконно используются материалы, сообщите об этом администрации сайта через форму обратной связи.
Все материалы, размещенные на сайте, созданы авторами сайта либо размещены пользователями сайта и представлены на сайте исключительно для ознакомления. Авторские права на материалы принадлежат их законным авторам. Частичное или полное копирование материалов сайта без письменного разрешения администрации сайта запрещено! Мнение администрации может не совпадать с точкой зрения авторов.
Создание консольного приложения «Калькулятор» на C++ Create a console calculator in C++
Обычной отправной точкой для программиста на C++ является приложение «Hello World», The usual starting point for a C++ programmer is a «Hello, world!» выполняемое в командной строке. application that runs on the command line. Вот что вы создадите в Visual Studio в этой статье, и затем мы перейдем к более сложной задаче: приложению калькулятора. That’s what you’ll create first in Visual Studio in this article, and then we’ll move on to something more challenging: a calculator app.
Предварительные требования Prerequisites
- Установите и запустите на своем компьютере Visual Studio с рабочей нагрузкой Разработка классических приложений на C++ . Have Visual Studio with the Desktop development with C++ workload installed and running on your computer. Если установка еще не выполнена, см. статью Установка поддержки C++ в Visual Studio. If it’s not installed yet, see Install C++ support in Visual Studio.
Создание проекта приложения Create your app project
Visual Studio использует проекты, чтобы упорядочить код для приложения, и решения, чтобы упорядочить проекты. Visual Studio uses projects to organize the code for an app, and solutions to organize your projects. Проект содержит все параметры, конфигурации и правила, используемые для сборки приложения. A project contains all the options, configurations, and rules used to build your apps. Кроме того, он управляет связью между всеми файлами проекта и любыми внешними файлами. It also manages the relationship between all the project’s files and any external files. Чтобы создать приложение, сначала создайте проект и решение. To create your app, first, you’ll create a new project and solution.
Если вы только запустили Visual Studio, вы увидите диалоговое окно Visual Studio 2019. If you’ve just started Visual Studio, you’ll see the Visual Studio 2019 dialog box. Выберите Создать проект, чтобы приступить к работе. Choose Create a new project to get started.
Или в строке меню Visual Studio последовательно выберите Файл > Создать > Проект. Otherwise, on the menubar in Visual Studio, choose File > New > Project. Откроется окно Создание проекта. The Create a new project window opens.
В списке шаблонов проектов выберите Консольное приложение и нажмите Далее. In the list of project templates, choose Console App, then choose Next.
Убедитесь, что вы выбрали версию C++ для шаблона Консольное приложение. Make sure you choose the C++ version of the Console App template. Этот шаблон содержит теги C++ , Windows и Консоль, а в углу значка есть «++». It has the C++, Windows, and Console tags, and the icon has «++» in the corner.
В диалоговом окне Настроить новый проект выберите поле ввода Имя проекта, назовите новый проект CalculatorTutorial и нажмите Создать. In the Configure your new project dialog box, select the Project name edit box, name your new project CalculatorTutorial, then choose Create.

Будет создано пустое консольное приложение Windows на C++. An empty C++ Windows console application gets created. Консольные приложения используют окно консоли Windows для отображения выходных данных и приема данных, вводимых пользователем. Console applications use a Windows console window to display output and accept user input. В Visual Studio откроется окно редактора с созданным кодом. In Visual Studio, an editor window opens and shows the generated code:
Проверка сборки и выполнения нового приложения Verify that your new app builds and runs
Шаблон для нового консольного приложения Windows создает простое приложение Hello World на C++. The template for a new Windows console application creates a simple C++ «Hello World» app. На этом этапе вы можете видеть, как Visual Studio создает и запускает созданные вами приложения прямо из интегрированной среды разработки. At this point, you can see how Visual Studio builds and runs the apps you create right from the IDE.
Для сборки проекта выберите в меню Сборка пункт Собрать решение. To build your project, choose Build Solution from the Build menu. Окно Вывод отображает результаты процесса сборки. The Output window shows the results of the build process.
Чтобы запустить этот код, в строке меню выберите Отладка и Запуск без отладки. To run the code, on the menu bar, choose Debug, Start without debugging.
Открывается окно консоли, и запускается ваше приложение. A console window opens and then runs your app. При запуске консольного приложения в Visual Studio система выполняет код, а затем выводит сообщение «Нажмите любую клавишу, чтобы закрыть это окно. When you start a console app in Visual Studio, it runs your code, then prints «Press any key to close this window . . . .», .» чтобы вы могли просмотреть выходные данные. to give you a chance to see the output. Поздравляем! Congratulations! Вы создали свое первое консольное приложение «Hello World» You’ve created your first «Hello, world!» в Visual Studio! console app in Visual Studio!
Нажмите любую клавишу, чтобы закрыть окно консоли и вернуться в редактор Visual Studio. Press a key to dismiss the console window and return to Visual Studio.
Теперь у вас есть средства для сборки и запуска приложения после каждого изменения, чтобы убедиться, что код по-прежнему работает должным образом. You now have the tools to build and run your app after every change, to verify that the code still works as you expect. Позже мы покажем, как выполнить его отладку при неправильной работе. Later, we’ll show you how to debug it if it doesn’t.
Изменение кода Edit the code
Теперь давайте превратим код в этом шаблоне в приложение калькулятора. Now let’s turn the code in this template into a calculator app.
В файле CalculatorTutorial.cpp измените код таким образом, чтобы он соответствовал этому примеру: In the CalculatorTutorial.cpp file, edit the code to match this example:
Пояснения к коду: Understanding the code:
- Операторы #include позволяют ссылаться на код, расположенный в других файлах. The #include statements allow you to reference code located in other files. Иногда вы можете увидеть имя файла, заключенное в угловые скобки ( <> ), а в других случаях — в кавычки ( » « ). Sometimes, you may see a filename surrounded by angle brackets (<>); other times, it’s surrounded by quotes (» «). В общем случае угловые скобки используются при ссылке на стандартную библиотеку C++, а кавычки — для других файлов. In general, angle brackets are used when referencing the C++ Standard Library, while quotes are used for other files.
- Строка using namespace std; сообщает компилятору ожидать данные от стандартной библиотеки C++ для использования в этом файле. The using namespace std; line tells the compiler to expect stuff from the C++ Standard Library to be used in this file. Без нее каждое ключевое слово из этой библиотеки пришлось бы предварять элементом std:: , чтобы обозначить его область. Without this line, each keyword from the library would have to be preceded with a std:: , to denote its scope. Например, без этой строки каждую ссылку на cout потребовалось бы записывать в виде std::cout . For instance, without that line, each reference to cout would have to be written as std::cout . Оператор using добавляется, чтобы сделать код более понятным. The using statement is added to make the code look more clean.
- Ключевое слово cout используется для вывода сведений в стандартный поток вывода в C++. The cout keyword is used to print to standard output in C++. Оператор The
- Ключевое слово endl аналогично клавише ВВОД — оно завершает строку и переводит курсор на следующую строку. The endl keyword is like the Enter key; it ends the line and moves the cursor to the next line. Для выполнения той же задачи рекомендуется помещать \n внутрь строки (заключенной в «»), так как endl всегда освобождает буфер и может негативно повлиять на производительность программы, но из-за того, что это очень небольшое приложение, в нем используется endl для улучшения удобочитаемости. It is a better practice to put a \n inside the string (contained by «») to do the same thing, as endl always flushes the buffer and can hurt the performance of the program, but since this is a very small app, endl is used instead for better readability.
- Все операторы C++ должны заканчиваться точкой с запятой, а все приложения C++ — содержать функцию main() . All C++ statements must end with semicolons and all C++ applications must contain a main() function. Именно ее программа выполняет при запуске. This function is what the program runs at the start. Для использования весь код должен быть доступен из main() . All code must be accessible from main() in order to be used.
Чтобы сохранить файл, нажмите клавиши CTRL+S или выберите элемент Сохранить в верхней части интегрированной среды разработки, выглядящий как значок гибкого диска на панели инструментов в строке меню. To save the file, enter Ctrl+S, or choose the Save icon near the top of the IDE, the floppy disk icon in the toolbar under the menu bar.
Чтобы запустить приложение, нажмите клавиши CTRL+F5 или перейдите в меню Отладка и выберите Запуск без отладки. To run the application, press Ctrl+F5 or go to the Debug menu and choose Start Without Debugging. Должно отобразится окно консоли с текстом, указанным в коде. You should see a console window appear that displays the text specified in the code.
По завершении закройте окно консоли. Close the console window when you’re done.
Добавление кода для выполнения математических операций Add code to do some math
Пора добавить математическую логику. It’s time to add some math logic.
Добавление класса Calculator To add a Calculator class
В меню Проект выберите команду Добавить класс. Go to the Project menu and choose Add Class. В поле ввода Имя класса введите Calculator. In the Class Name edit box, enter Calculator. Нажмите кнопку ОК. Choose OK. В проект будут добавлены два новых файла. Two new files get added to your project. Чтобы сохранить сразу все измененные файлы, нажмите клавиши CTRL+SHIFT+S. To save all your changed files at once, press Ctrl+Shift+S. Это сочетание клавиш для команды Файл > Сохранить все. It’s a keyboard shortcut for File > Save All. Кроме того, есть кнопка Сохранить все на панели инструментов. Она имеет вид значка с двумя дискетами рядом с кнопкой Сохранить. There’s also a toolbar button for Save All, an icon of two floppy disks, found beside the Save button. В общем случае рекомендуется регулярно нажимать кнопку Сохранить все, чтобы не пропустить никакие файлы при сохранении. In general, it’s good practice to do Save All frequently, so you don’t miss any files when you save.
Класс подобен схеме для объекта, который выполняет какие-либо действия. A class is like a blueprint for an object that does something. В этом случае мы определяем калькулятор и особенности его работы. In this case, we define a calculator and how it should work. Использованный ранее мастер Добавить класс создал файлы H и CPP, имя которых совпадает с именем класса. The Add Class wizard you used above created .h and .cpp files that have the same name as the class. Вы можете просмотреть полный список файлов проекта в окне обозревателя решений, отображаемом в боковой части окна IDE. You can see a full list of your project files in the Solution Explorer window, visible on the side of the IDE. Если окно не отображается, его можно открыть из строки меню, выбрав Вид > Обозреватель решений. If the window isn’t visible, you can open it from the menu bar: choose View > Solution Explorer.
Теперь у вас в редакторе должно быть открыто три вкладки: CalculatorTutorial.cpp, Calculator.h и Calculator.cpp. You should now have three tabs open in the editor: CalculatorTutorial.cpp, Calculator.h, and Calculator.cpp. Если вы случайно закроете одну из них, то можете повторно открыть эту вкладку, дважды щелкнув ее в окне обозревателя решений. If you accidentally close one of them, you can reopen it by double-clicking it in the Solution Explorer window.
На вкладке Calculator.h удалите созданные строки Calculator(); и
Calculator(); , так как здесь они вам не понадобятся. In Calculator.h, remove the Calculator(); and
Calculator(); lines that were generated, since you won’t need them here. Затем добавьте следующую строку кода, чтобы файл выглядел следующим образом: Next, add the following line of code so the file now looks like this:
Пояснения к коду Understanding the code
- Добавленная строка объявляет новую функцию Calculate , которую мы используем для выполнения математических операций, таких как сложение, вычитание, умножение и деление. The line you added declares a new function called Calculate , which we’ll use to run math operations for addition, subtraction, multiplication, and division.
- Код C++ упорядочен по файлам заголовка (H) и исходным файлам (CPP). C++ code is organized into header (.h) files and source (.cpp) files. Различные компиляторы поддерживают несколько других расширений имени файла, но это основные, о которых вам нужно знать. Several other file extensions are supported by various compilers, but these are the main ones to know about. Функции и переменные обычно объявляются, то есть получают имя и тип, в файлах заголовка, и реализуются, то есть получают определение, в исходных файлах. Functions and variables are normally declared, that is, given a name and a type, in header files, and implemented, or given a definition, in source files. Чтобы обратиться к коду, определенному в другом файле, вы можете использовать #include «filename.h» , где «filename.h» — это имя файла, объявляющего переменные или функции, которые требуется использовать. To access code defined in another file, you can use #include «filename.h» , where ‘filename.h’ is the name of the file that declares the variables or functions you want to use.
- Две удаленные строки объявляли конструктор и деструктор для класса. The two lines you deleted declared a constructor and destructor for the class. Для такого простого класса компилятор создает их автоматически, а их использование выходит за рамки данного руководства. For a simple class like this one, the compiler creates them for you, and their uses are beyond the scope of this tutorial.
- Рекомендуется упорядочивать код по различным файлам в зависимости от его назначения, чтобы позднее было проще найти нужный код. It’s good practice to organize your code into different files based on what it does, so it’s easy to find the code you need later. В данном случае мы определяем класс Calculator отдельно от файла, содержащего функцию main() , но планируем ссылаться на класс Calculator в main() . In our case, we define the Calculator class separately from the file containing the main() function, but we plan to reference the Calculator class in main() .
Под Calculate появится зеленая волнистая линия. You’ll see a green squiggle appear under Calculate . Это вызвано тем, что мы еще не определили функцию Calculate в CPP-файле. It’s because we haven’t defined the Calculate function in the .cpp file. Наведите указатель на это слово, щелкните по появившейся лампочке (в данном случае отвертке) и выберите Создать определение «Calculate» в Calculator.cpp. Hover over the word, click the lightbulb (in this case, a screwdriver) that pops up, and choose Create definition of ‘Calculate’ in Calculator.cpp.
Отображается всплывающее окно, сообщающее об изменении кода, внесенном в другом файле. A pop-up appears that gives you a peek of the code change that was made in the other file. Код был добавлен в Calculator.cpp. The code was added to Calculator.cpp.
Сейчас он возвращает просто 0.0. Currently, it just returns 0.0. Давайте изменим это. Let’s change that. Нажмите клавишу ESC, чтобы закрыть всплывающее окно. Press Esc to close the pop-up.
Переключитесь на файл Calculator.cpp в окне редактора. Switch to the Calculator.cpp file in the editor window. Удалите разделы Calculator() и
Calculator() (как сделали в H-файле) и добавьте в Calculate() следующий код: Remove the Calculator() and
Calculator() sections (as you did in the .h file) and add the following code to Calculate() :
Пояснения к коду Understanding the code
- Функция Calculate использует число, оператор и второе число, а затем выполняет запрошенную операцию над этими числами. The function Calculate consumes a number, an operator, and a second number, then performs the requested operation on the numbers.
- Оператор switch проверяет, какой оператор был предоставлен, и выполняет только вариант (case), соответствующий этой операции. The switch statement checks which operator was provided, and only executes the case corresponding to that operation. Вариант default: является резервным на тот случай, если пользователь вводит неприемлемый оператор, чтобы программа не прервала работу. The default: case is a fallback in case the user types an operator that isn’t accepted, so the program doesn’t break. В общем случае лучше обрабатывать некорректный ввод данных пользователем более элегантным способом, но это выходит за рамки данного руководства. In general, it’s best to handle invalid user input in a more elegant way, but this is beyond the scope of this tutorial.
- Ключевое слово double обозначает тип числа, который поддерживает десятичные числа. The double keyword denotes a type of number that supports decimals. Таким образом, калькулятор может выполнять математические операции с десятичными и целыми числами. This way, the calculator can handle both decimal math and integer math. Функция Calculate должна всегда возвращать такое число из-за типа double в самом начале кода (обозначает возвращаемый тип функции), поэтому даже в случае по умолчанию возвращается значение 0,0. The Calculate function is required to always return such a number due to the double at the very start of the code (this denotes the function’s return type), which is why we return 0.0 even in the default case.
- H-файл объявляет функцию prototype, которая заранее сообщает компилятору, какой параметр требуется и какой тип возвращаемого значения следует ожидать. The .h file declares the function prototype, which tells the compiler upfront what parameters it requires, and what return type to expect from it. CPP-файл содержит все сведения о реализации этой функции. The .cpp file has all the implementation details of the function.
Если построить и запустить код еще раз на этом этапе, он по-прежнему завершит работу после запроса операции для выполнения. If you build and run the code again at this point, it will still exit after asking which operation to perform. Далее вам нужно изменить функцию main для выполнения вычислений. Next, you’ll modify the main function to do some calculations.
Вызов функций-членов класса Calculator To call the Calculator class member functions
Теперь давайте изменим функцию main в CalculatorTutorial.cpp: Now let’s update the main function in CalculatorTutorial.cpp:
Пояснения к коду Understanding the code
- Так как программы C++ всегда запускаются с функции main() , нам нужно вызвать из нее другой, для чего нужен оператор #include . Since C++ programs always start at the main() function, we need to call our other code from there, so a #include statement is needed.
- Объявлены начальные переменные x , y , oper и result для хранения, соответственно, первого числа, второго числа, оператора и окончательного результата. Some initial variables x , y , oper , and result are declared to store the first number, second number, operator, and final result, respectively. Рекомендуется всегда присваивать им некоторые начальные значения, чтобы избежать неопределенного поведения. Это мы здесь и делаем. It is always good practice to give them some initial values to avoid undefined behavior, which is what is done here.
- Строка Calculator c; объявляет объект «c» в качестве экземпляра класса Calculator . The Calculator c; line declares an object named ‘c’ as an instance of the Calculator class. Сам класс является лишь схемой для описания работы калькуляторов, а объект — это конкретный калькулятор, который выполняет вычисления. The class itself is just a blueprint for how calculators work; the object is the specific calculator that does the math.
- Оператор while (true) является циклом. The while (true) statement is a loop. Код внутри этого цикла продолжает выполняться снова и снова, пока выполняется условие в () . The code inside the loop continues to execute over and over again as long as the condition inside the () holds true. Так как условие просто указано как true , оно всегда выполняется, поэтому цикл выполняется бесконечно. Since the condition is simply listed as true , it’s always true, so the loop runs forever. Чтобы закрыть программу, пользователю нужно вручную закрыть окно консоли. To close the program, the user must manually close the console window. В противном случае программа будет постоянно ожидать новые входные данные. Otherwise, the program always waits for new input.
- Ключевое слово cin используется для получения входных данных от пользователя. The cin keyword is used to accept input from the user. Этот входной поток способен обработать строку текста, введенного в окне консоли, и поместить ее внутрь каждой из перечисленных переменных в указанном порядке, при условии, что введенные пользователем данные соответствуют требуемой спецификации. This input stream is smart enough to process a line of text entered in the console window and place it inside each of the variables listed, in order, assuming the user input matches the required specification. Вы можете изменить эту строку, чтобы принять другие типы входных данных, например, больше двух чисел, однако для этого также потребуется изменить функцию Calculate() . You can modify this line to accept different types of input, for instance, more than two numbers, though the Calculate() function would also need to be updated to handle this.
- Выражение c.Calculate(x, oper, y); вызывает определенную ранее функцию Calculate и предоставляет введенные входные значения. The c.Calculate(x, oper, y); expression calls the Calculate function defined earlier, and supplies the entered input values. Затем она возвращает число, сохраняемое в result . The function then returns a number that gets stored in result .
- Наконец, в консоль выводится result , благодаря чему пользователь видит результат вычисления. Finally, result is printed to the console, so the user sees the result of the calculation.
Повторная сборка и проверка кода Build and test the code again
Пришло время снова протестировать программу еще раз, чтобы убедиться в ее правильной работе. Now it’s time to test the program again to make sure everything works properly.
Нажмите клавиши CTRL+F5, чтобы перестроить и запустить приложение. Press Ctrl+F5 to rebuild and start the app.
Введите 5 + 5 и нажмите клавишу ВВОД. Enter 5 + 5 , and press Enter. Убедитесь, что выводится результат 10. Verify that the result is 10.
Отладка приложения Debug the app
Так как пользователь может ввести в окне консоли что угодно, нужно убедиться, что калькулятор обрабатывает некоторые входные данные правильно. Since the user is free to type anything into the console window, let’s make sure the calculator handles some input as expected. Вместо запуска программы давайте выполним ее отладку, чтобы можно было проверить ее выполнение шаг за шагом. Instead of running the program, let’s debug it instead, so we can inspect what it’s doing in detail, step-by-step.
Запуск приложения в отладчике To run the app in the debugger
Установите точку останова на строке result = c.Calculate(x, oper, y); , сразу после запроса входных данных у пользователя. Set a breakpoint on the result = c.Calculate(x, oper, y); line, just after the user was asked for input. Чтобы задать точку останова, щелкните рядом со строкой серую вертикальную панель, идущую вдоль левой части окна редактора. To set the breakpoint, click next to the line in the gray vertical bar along the left edge of the editor window. Появится красная точка. A red dot appears.
Теперь при отладке программа всегда приостанавливает выполнение на этой строке. Now when we debug the program, it always pauses execution at that line. Мы уже имеем примерное представление о том, что в простых случаях программа работает. We already have a rough idea that the program works for simple cases. Так как нам не нужно приостанавливать выполнение при каждом запуске, создадим условную точку останова. Since we don’t want to pause execution every time, let’s make the breakpoint conditional.
Щелкните правой кнопкой мыши красную точку, обозначающую точку останова, и выберите команду Условия. Right-click the red dot that represents the breakpoint, and choose Conditions. В поле ввода для условия введите (y == 0) && (oper == ‘/’) . In the edit box for the condition, enter (y == 0) && (oper == ‘/’) . По завершении операции нажмите кнопку Закрыть. Choose the Close button when you’re done. Условия сохранятся автоматически. The condition is saved automatically.
Теперь выполнение приостанавливается в точке останова, в частности при попытке деления на 0. Now we pause execution at the breakpoint specifically if a division by 0 is attempted.
Чтобы отладить программу, нажмите клавишу F5 или выберите Локальный отладчик Windows — кнопку панели инструментов со значком зеленой стрелки. To debug the program, press F5, or choose the Local Windows Debugger toolbar button that has the green arrow icon. Если ввести в консольном приложении нечто вроде «5 — 0», программа работает как обычно и продолжает выполнение. In your console app, if you enter something like «5 — 0», the program behaves normally and keeps running. Но если ввести «10 / 0», она приостанавливает выполнение в точке останова. However, if you type «10 / 0», it pauses at the breakpoint. Вы можете ввести любое число пробелов между оператором и числами; функция cin достаточно интеллектуальна для того, чтобы правильно проанализировать входные данные. You can even put any number of spaces between the operator and numbers: cin is smart enough to parse the input appropriately.
Полезные окна в отладчике Useful windows in the debugger
Каждый раз при отладке кода вы можете заметить, что появляется несколько новых окон. Whenever you debug your code, you may notice that some new windows appear. Они могут оказаться полезными в процессе отладки. These windows can assist your debugging experience. Давайте рассмотрим окно Видимые. Take a look at the Autos window. Окно Видимые содержит текущие значения переменных, используемых по меньшей мере за три строки перед текущей строкой. The Autos window shows you the current values of variables used at least three lines before and up to the current line. Чтобы просмотреть все переменные из этой функции, переключитесь в окно Локальные. To see all of the variables from that function, switch to the Locals window. Вы можете изменять значения этих переменных во время отладки, чтобы оценить их влияние на программу. You can actually modify the values of these variables while debugging, to see what effect they would have on the program. В данном случае мы оставим их без изменений. In this case, we’ll leave them alone.
Кроме того, вы можете просто навести указатель на переменные в самом коде, чтобы просмотреть их текущие значения на участке, где приостановлено выполнение. You can also just hover over variables in the code itself to see their current values where the execution is currently paused. Сначала щелкните окно редактора, чтобы сделать его активным. Make sure the editor window is in focus by clicking on it first.
Продолжение отладки To continue debugging
Желтая линия слева показывает текущую точку выполнения. The yellow line on the left shows the current point of execution. Текущая строка вызывает Calculate , поэтому нажмите клавишу F11, чтобы выполнить Шаг с заходом для этой функции. The current line calls Calculate , so press F11 to Step Into the function. Вы переходите в тело функции Calculate . You’ll find yourself in the body of the Calculate function. Обдуманно применяйте функцию Шаг с заходом, чтобы не терять время из-за чрезмерного ее использования. Be careful with Step Into; if you do it too much, you may waste a lot of time. С помощью функции анализируется любой код, используемый в текущей строке, включая стандартные функции библиотеки. It goes into any code you use on the line you are on, including standard library functions.
Теперь, когда точка выполнения находится в начале функции Calculate , нажмите клавишу F10 для перехода на следующую строку в рамках выполнения программы. Now that the point of execution is at the start of the Calculate function, press F10 to move to the next line in the program’s execution. При нажатии клавиши F10 активируется функция Шаг с обходом. F10 is also known as Step Over. Шаг с обходом можно использовать для перемещения по строкам, не вдаваясь в подробности того, что происходит в каждой части строки. You can use Step Over to move from line to line, without delving into the details of what is occurring in each part of the line. В общем случае следует использовать Шаг с обходом, а не Шаг с заходом, если только вы не хотите подробно изучить код, вызываемый из другого расположения (как в случае с переходом к телу функции Calculate ). In general you should use Step Over instead of Step Into, unless you want to dive more deeply into code that is being called from elsewhere (as you did to reach the body of Calculate ).
Продолжайте использовать клавишу F10, чтобы выполнять Шаг с обходом для каждой строки, пока не вернетесь к функции main() в другом файле, и остановитесь на строке cout . Continue using F10 to Step Over each line until you get back to the main() function in the other file, and stop on the cout line.
Похоже, программа работает правильно — принимает первое число и делит его на второе. It looks like the program is doing what is expected: it takes the first number, and divides it by the second. В строке cout наведите указатель мыши на переменную result или взгляните на result в окне Видимые. On the cout line, hover over the result variable or take a look at result in the Autos window. Соответствующее значение отображается как inf. Это неправильное поведение, и нужно его скорректировать. You’ll see its value is listed as «inf», which doesn’t look right, so let’s fix it. В строке cout просто выводится любое значение, хранящееся в result . Поэтому при продвижении еще на один шаг с помощью клавиши F10 в окне консоли отображается следующее: The cout line just outputs whatever value is stored in result , so when you step one more line forward using F10, the console window displays:
Причина такого результата в том, что деление на ноль является неопределенным, поэтому у программы нет числового ответа на запрошенную операцию. This result happens because division by zero is undefined, so the program doesn’t have a numerical answer to the requested operation.
Исправление ошибки деления на ноль To fix the «divide by zero» error
Давайте обеспечим корректную обработку деления на ноль, чтобы пользователь мог осознать проблему. Let’s handle division by zero more gracefully, so a user can understand the problem.
Внесите следующие изменения в CalculatorTutorial.cpp. Make the following changes in CalculatorTutorial.cpp. (Прерывать выполнение программы при редактировании не требуется благодаря функции отладчика Изменить и продолжить): (You can leave the program running as you edit, thanks to a debugger feature called Edit and Continue):
Теперь нажмите клавишу F5 один раз. Now press F5 once. При этом выполнение программы продолжается вплоть до приостановки для запроса данных, вводимых пользователем. Program execution continues all the way until it has to pause to ask for user input. Снова введите 10 / 0 . Enter 10 / 0 again. Теперь выводится более информативное сообщение. Now, a more helpful message is printed. У пользователя запрашиваются дополнительные входные данные, и программа продолжает выполнение в обычном режиме. The user is asked for more input, and the program continues executing normally.
При редактировании кода в режиме отладки существует риск того, что код устареет. When you edit code while in debugging mode, there is a risk of code becoming stale. Это происходит, когда отладчик продолжает выполнять старый код, не учитывающий внесенные вами изменения. This happens when the debugger is still running your old code, and has not yet updated it with your changes. В подобной ситуации отладчик выводит диалоговое окно с соответствующим сообщением. The debugger pops up a dialog to inform you when this happens. В некоторых случаях может потребоваться нажать клавишу F5, чтобы обновить выполняемый код. Sometimes, you may need to press F5 to refresh the code being executed. В частности, если вы вносите изменения внутри функции, когда точка выполнения находится внутри этой же функции, вам потребуется выполнить шаг с выходом из функции, а затем вернуться в нее, чтобы получить обновленный код. In particular, if you make a change inside a function while the point of execution is inside that function, you’ll need to step out of the function, then back into it again to get the updated code. Если по какой-либо причине это не работает и вы видите сообщение об ошибке, можно остановить отладку, щелкнув красный квадрат на панели инструментов под меню в верхней части интегрированной среды разработки, а затем перезапустить отладку, нажав клавишу F5 или выбрав зеленую стрелку «воспроизведения» рядом с кнопкой остановки на панели инструментов. If that doesn’t work for some reason and you see an error message, you can stop debugging by clicking on the red square in the toolbar under the menus at the top of the IDE, then start debugging again by entering F5 or by choosing the green «play» arrow beside the stop button on the toolbar.
Пояснения по сочетаниям клавиш для выполнения и отладки Understanding the Run and Debug shortcuts
- Клавиша F5 (или команда Отладка >Запустить отладку) запускает сеанс отладки, если он еще не активен, и выполняет программу до тех пор, пока не будет встречена точка останова либо программе не потребуются вводимые пользователем данные. F5 (or Debug >Start Debugging) starts a debugging session if one isn’t already active, and runs the program until a breakpoint is hit or the program needs user input. Если вводимые пользователем данные не требуются и точка останова отсутствует, программа завершает работу, а окно консоли автоматически закрывается после завершения выполнения программы. If no user input is needed and no breakpoint is available to hit, the program terminates and the console window closes itself when the program finishes running. Если вы выполняете программу уровня «Hello World», используйте сочетание клавиш CTRL+F5 или задайте точку останова перед нажатием клавиши F5, чтобы окно оставалось открытым. If you have something like a «Hello World» program to run, use Ctrl+F5 or set a breakpoint before you enter F5 to keep the window open.
- Сочетание клавиш CTRL+F5 (или команда Отладка >Запуск без отладки) запускает приложение без перехода в режим отладки. Ctrl+F5 (or Debug >Start Without Debugging) runs the application without going into debug mode. Это немного быстрее отладки, а окно консоли остается открытым после завершения выполнения программы. This is slightly faster than debugging, and the console window stays open after the program finishes executing.
- Клавиша F10 (соответствующая возможности Шаг с обходом) позволяет выполнять построчную итерацию по коду, а также визуализировать выполнение кода и значения переменных на каждом шаге выполнения. F10 (known as Step Over) lets you iterate through code, line-by-line, and visualize how the code is run and what variable values are at each step of execution.
- Клавиша F11 (соответствующая возможности Шаг с заходом) работает аналогично возможности Шаг с обходом, за исключением того, что заходит в любые функции, вызываемые в строке выполнения. F11 (known as Step Into) works similarly to Step Over, except it steps into any functions called on the line of execution. Например, если в выполняемой строке вызывается функция, при нажатии клавиши F11 указатель перемещается в тело функции, чтобы вы могли проследить выполнение кода функции, прежде чем вернуться на исходную строку. For example, if the line being executed calls a function, pressing F11 moves the pointer into the body of the function, so you can follow the function’s code being run before coming back to the line you started at. При нажатии клавиши F10 выполняется шаг с обходом по вызову функции и простой переход на следующую строку. Вызов функции все равно выполняется, но программа не приостанавливается, чтобы показать вам, что именно она делает. Pressing F10 steps over the function call and just moves to the next line; the function call still happens, but the program doesn’t pause to show you what it’s doing.
Закрытие приложения Close the app
- Если оно все еще выполняется, закройте окно консоли для приложения калькулятора. If it’s still running, close the console window for the calculator app.
Готовое приложение The finished app
Поздравляем! Congratulations! Вы завершили написание кода для приложения калькулятора, а также выполнили его сборку и отладку в Visual Studio. You’ve completed the code for the calculator app, and built and debugged it in Visual Studio.
Следующие шаги Next steps
Обычной отправной точкой для программиста на C++ является приложение «Hello World», The usual starting point for a C++ programmer is a «Hello, world!» выполняемое в командной строке. application that runs on the command line. Вот что вы создадите в Visual Studio в этой статье, и затем мы перейдем к более сложной задаче: приложению калькулятора. That’s what you’ll create in Visual Studio in this article, and then we’ll move on to something more challenging: a calculator app.
Предварительные требования Prerequisites
- Установите и запустите на своем компьютере Visual Studio с рабочей нагрузкой Разработка классических приложений на C++ . Have Visual Studio with the Desktop development with C++ workload installed and running on your computer. Если установка еще не выполнена, см. статью Установка поддержки C++ в Visual Studio. If it’s not installed yet, see Install C++ support in Visual Studio.
Создание проекта приложения Create your app project
Visual Studio использует проекты, чтобы упорядочить код для приложения, и решения, чтобы упорядочить проекты. Visual Studio uses projects to organize the code for an app, and solutions to organize your projects. Проект содержит все параметры, конфигурации и правила, используемые для сборки приложения. A project contains all the options, configurations, and rules used to build your apps. Кроме того, он управляет связью между всеми файлами проекта и любыми внешними файлами. It also manages the relationship between all the project’s files and any external files. Чтобы создать приложение, сначала создайте проект и решение. To create your app, first, you’ll create a new project and solution.
В строке меню Visual Studio последовательно выберите Файл > Создать > Проект. On the menubar in Visual Studio, choose File > New > Project. Открывается окно Новый проект. The New Project window opens.
На боковой панели слева выберите Visual C++ . On the left sidebar, make sure Visual C++ is selected. В центральной области выберите Консольное приложение Windows. In the center, choose Windows Console Application.
В поле ввода Имя внизу введите имя нового проекта CalculatorTutorial, а затем нажмите кнопку ОК. In the Name edit box at the bottom, name the new project CalculatorTutorial, then choose OK.
Будет создано пустое консольное приложение Windows на C++. An empty C++ Windows console application gets created. Консольные приложения используют окно консоли Windows для отображения выходных данных и приема данных, вводимых пользователем. Console applications use a Windows console window to display output and accept user input. В Visual Studio откроется окно редактора с созданным кодом. In Visual Studio, an editor window opens and shows the generated code:
Проверка сборки и выполнения нового приложения Verify that your new app builds and runs
Шаблон для нового консольного приложения Windows создает простое приложение «Hello World» на C++. The template for a new windows console application creates a simple C++ «Hello World» app. На этом этапе вы можете видеть, как Visual Studio создает и запускает созданные вами приложения прямо из интегрированной среды разработки. At this point, you can see how Visual Studio builds and runs the apps you create right from the IDE.
Для сборки проекта выберите в меню Сборка пункт Собрать решение. To build your project, choose Build Solution from the Build menu. Окно Вывод отображает результаты процесса сборки. The Output window shows the results of the build process.
Чтобы запустить этот код, в строке меню выберите Отладка и Запуск без отладки. To run the code, on the menu bar, choose Debug, Start without debugging.
Открывается окно консоли, и запускается ваше приложение. A console window opens and then runs your app. При запуске консольного приложения в Visual Studio система выполняет код, а затем выводит сообщение «Нажмите любую клавишу, чтобы продолжить. When you start a console app in Visual Studio, it runs your code, then prints «Press any key to continue . . . .», .» чтобы вы могли просмотреть выходные данные. to give you a chance to see the output. Поздравляем! Congratulations! Вы создали свое первое консольное приложение «Hello World» You’ve created your first «Hello, world!» в Visual Studio! console app in Visual Studio!
Нажмите любую клавишу, чтобы закрыть окно консоли и вернуться в редактор Visual Studio. Press a key to dismiss the console window and return to Visual Studio.
Теперь у вас есть средства для сборки и запуска приложения после каждого изменения, чтобы убедиться, что код по-прежнему работает должным образом. You now have the tools to build and run your app after every change, to verify that the code still works as you expect. Позже мы покажем, как выполнить его отладку при неправильной работе. Later, we’ll show you how to debug it if it doesn’t.
Изменение кода Edit the code
Теперь давайте превратим код в этом шаблоне в приложение калькулятора. Now let’s turn the code in this template into a calculator app.
В файле CalculatorTutorial.cpp измените код таким образом, чтобы он соответствовал этому примеру: In the CalculatorTutorial.cpp file, edit the code to match this example:
Пояснения к коду: Understanding the code:
- Операторы #include позволяют ссылаться на код, расположенный в других файлах. The #include statements allow you to reference code located in other files. Иногда вы можете увидеть имя файла, заключенное в угловые скобки ( <> ), а в других случаях — в кавычки ( » « ). Sometimes, you may see a filename surrounded by angle brackets (<>); other times, it’s surrounded by quotes (» «). В общем случае угловые скобки используются при ссылке на стандартную библиотеку C++, а кавычки — для других файлов. In general, angle brackets are used when referencing the C++ Standard Library, while quotes are used for other files.
- Строка #include «pch.h» (или файл #include «stdafx.h» в версиях, предшествующих Visual Studio 2017) ссылается на некий объект, известный как предкомпилированный заголовок. The #include «pch.h» (or in Visual Studio 2017 and earlier, #include «stdafx.h» ) line references something known as a precompiled header. Они части используются профессиональными программистами для улучшения времени компиляции, однако выходят за рамки материала, обсуждаемого в этом руководстве. These are often used by professional programmers to improve compilation times, but they are beyond the scope of this tutorial.
- Строка using namespace std; сообщает компилятору ожидать данные от стандартной библиотеки C++ для использования в этом файле. The using namespace std; line tells the compiler to expect stuff from the C++ Standard Library to be used in this file. Без нее каждое ключевое слово из этой библиотеки пришлось бы предварять элементом std:: , чтобы обозначить его область. Without this line, each keyword from the library would have to be preceded with a std:: , to denote its scope. Например, без этой строки каждую ссылку на cout потребовалось бы записывать в виде std::cout . For instance, without that line, each reference to cout would have to be written as std::cout . Оператор using добавляется, чтобы сделать код более понятным. The using statement is added to make the code look more clean.
- Ключевое слово cout используется для вывода сведений в стандартный поток вывода в C++. The cout keyword is used to print to standard output in C++. Оператор The
- Ключевое слово endl аналогично клавише ВВОД — оно завершает строку и переводит курсор на следующую строку. The endl keyword is like the Enter key; it ends the line and moves the cursor to the next line. Для выполнения той же задачи рекомендуется помещать \n внутрь строки (заключенной в «»), так как endl всегда освобождает буфер и может негативно повлиять на производительность программы, но из-за того, что это очень небольшое приложение, в нем используется endl для улучшения удобочитаемости. It is a better practice to put a \n inside the string (contained by «») to do the same thing, as endl always flushes the buffer and can hurt the performance of the program, but since this is a very small app, endl is used instead for better readability.
- Все операторы C++ должны заканчиваться точкой с запятой, а все приложения C++ — содержать функцию main() . All C++ statements must end with semicolons and all C++ applications must contain a main() function. Именно ее программа выполняет при запуске. This function is what the program runs at the start. Для использования весь код должен быть доступен из main() . All code must be accessible from main() in order to be used.
Чтобы сохранить файл, нажмите клавиши CTRL+S или выберите элемент Сохранить в верхней части интегрированной среды разработки, выглядящий как значок гибкого диска на панели инструментов в строке меню. To save the file, enter Ctrl+S, or choose the Save icon near the top of the IDE, the floppy disk icon in the toolbar under the menu bar.
Чтобы запустить приложение, нажмите клавиши CTRL+F5 или перейдите в меню Отладка и выберите Запуск без отладки. To run the application, press Ctrl+F5 or go to the Debug menu and choose Start Without Debugging. Если отображается всплывающее окно This project is out of date (Этот проект устарел), можно выбрать Больше не показывать это диалоговое окно, а затем — Да, чтобы создать приложение. If you get a pop-up that says This project is out of date, you may select Do not show this dialog again, and then choose Yes to build your application. Должно отобразится окно консоли с текстом, указанным в коде. You should see a console window appear that displays the text specified in the code.
По завершении закройте окно консоли. Close the console window when you’re done.
Добавление кода для выполнения математических операций Add code to do some math
Пора добавить математическую логику. It’s time to add some math logic.
Добавление класса Calculator To add a Calculator class
В меню Проект выберите команду Добавить класс. Go to the Project menu and choose Add Class. В поле ввода Имя класса введите Calculator. In the Class Name edit box, enter Calculator. Нажмите кнопку ОК. Choose OK. В проект будут добавлены два новых файла. Two new files get added to your project. Чтобы сохранить сразу все измененные файлы, нажмите клавиши CTRL+SHIFT+S. To save all your changed files at once, press Ctrl+Shift+S. Это сочетание клавиш для команды Файл > Сохранить все. It’s a keyboard shortcut for File > Save All. Кроме того, есть кнопка Сохранить все на панели инструментов. Она имеет вид значка с двумя дискетами рядом с кнопкой Сохранить. There’s also a toolbar button for Save All, an icon of two floppy disks, found beside the Save button. В общем случае рекомендуется регулярно нажимать кнопку Сохранить все, чтобы не пропустить никакие файлы при сохранении. In general, it’s good practice to do Save All frequently, so you don’t miss any files when you save.
Класс подобен схеме для объекта, который выполняет какие-либо действия. A class is like a blueprint for an object that does something. В этом случае мы определяем калькулятор и особенности его работы. In this case, we define a calculator and how it should work. Использованный ранее мастер Добавить класс создал файлы H и CPP, имя которых совпадает с именем класса. The Add Class wizard you used above created .h and .cpp files that have the same name as the class. Вы можете просмотреть полный список файлов проекта в окне обозревателя решений, отображаемом в боковой части окна IDE. You can see a full list of your project files in the Solution Explorer window, visible on the side of the IDE. Если окно не отображается, его можно открыть из строки меню, выбрав Вид > Обозреватель решений. If the window isn’t visible, you can open it from the menu bar: choose View > Solution Explorer.
Теперь у вас в редакторе должно быть открыто три вкладки: CalculatorTutorial.cpp, Calculator.h и Calculator.cpp. You should now have three tabs open in the editor: CalculatorTutorial.cpp, Calculator.h, and Calculator.cpp. Если вы случайно закроете одну из них, то можете повторно открыть эту вкладку, дважды щелкнув ее в окне обозревателя решений. If you accidentally close one of them, you can reopen it by double-clicking it in the Solution Explorer window.
На вкладке Calculator.h удалите созданные строки Calculator(); и
Calculator(); , так как здесь они вам не понадобятся. In Calculator.h, remove the Calculator(); and
Calculator(); lines that were generated, since you won’t need them here. Затем добавьте следующую строку кода, чтобы файл выглядел следующим образом: Next, add the following line of code so the file now looks like this:
Пояснения к коду Understanding the code
- Добавленная строка объявляет новую функцию Calculate , которую мы используем для выполнения математических операций, таких как сложение, вычитание, умножение и деление. The line you added declares a new function called Calculate , which we’ll use to run math operations for addition, subtraction, multiplication, and division.
- Код C++ упорядочен по файлам заголовка (H) и исходным файлам (CPP). C++ code is organized into header (.h) files and source (.cpp) files. Различные компиляторы поддерживают несколько других расширений имени файла, но это основные, о которых вам нужно знать. Several other file extensions are supported by various compilers, but these are the main ones to know about. Функции и переменные обычно объявляются, то есть получают имя и тип, в файлах заголовка, и реализуются, то есть получают определение, в исходных файлах. Functions and variables are normally declared, that is, given a name and a type, in header files, and implemented, or given a definition, in source files. Чтобы обратиться к коду, определенному в другом файле, вы можете использовать #include «filename.h» , где «filename.h» — это имя файла, объявляющего переменные или функции, которые требуется использовать. To access code defined in another file, you can use #include «filename.h» , where ‘filename.h’ is the name of the file that declares the variables or functions you want to use.
- Две удаленные строки объявляли конструктор и деструктор для класса. The two lines you deleted declared a constructor and destructor for the class. Для такого простого класса компилятор создает их автоматически, а их использование выходит за рамки данного руководства. For a simple class like this one, the compiler creates them for you, and their uses are beyond the scope of this tutorial.
- Рекомендуется упорядочивать код по различным файлам в зависимости от его назначения, чтобы позднее было проще найти нужный код. It’s good practice to organize your code into different files based on what it does, so it’s easy to find the code you need later. В данном случае мы определяем класс Calculator отдельно от файла, содержащего функцию main() , но планируем ссылаться на класс Calculator в main() . In our case, we define the Calculator class separately from the file containing the main() function, but we plan to reference the Calculator class in main() .
Под Calculate появится зеленая волнистая линия. You’ll see a green squiggle appear under Calculate . Это вызвано тем, что мы еще не определили функцию Calculate в CPP-файле. It’s because we haven’t defined the Calculate function in the .cpp file. Наведите указатель на это слово, щелкните появившуюся лампочку и выберите Создать определение «Calculate» в Calculator.cpp. Hover over the word, click the lightbulb that pops up, and choose Create definition of ‘Calculate’ in Calculator.cpp. Отображается всплывающее окно, сообщающее об изменении кода, внесенном в другом файле. A pop-up appears that gives you a peek of the code change that was made in the other file. Код был добавлен в Calculator.cpp. The code was added to Calculator.cpp.
Сейчас он возвращает просто 0.0. Currently, it just returns 0.0. Давайте изменим это. Let’s change that. Нажмите клавишу ESC, чтобы закрыть всплывающее окно. Press Esc to close the pop-up.
Переключитесь на файл Calculator.cpp в окне редактора. Switch to the Calculator.cpp file in the editor window. Удалите разделы Calculator() и
Calculator() (как сделали в H-файле) и добавьте в Calculate() следующий код: Remove the Calculator() and
Calculator() sections (as you did in the .h file) and add the following code to Calculate() :
Пояснения к коду Understanding the code
- Функция Calculate использует число, оператор и второе число, а затем выполняет запрошенную операцию над этими числами. The function Calculate consumes a number, an operator, and a second number, then performs the requested operation on the numbers.
- Оператор switch проверяет, какой оператор был предоставлен, и выполняет только вариант (case), соответствующий этой операции. The switch statement checks which operator was provided, and only executes the case corresponding to that operation. Вариант default: является резервным на тот случай, если пользователь вводит неприемлемый оператор, чтобы программа не прервала работу. The default: case is a fallback in case the user types an operator that isn’t accepted, so the program doesn’t break. В общем случае лучше обрабатывать некорректный ввод данных пользователем более элегантным способом, но это выходит за рамки данного руководства. In general, it’s best to handle invalid user input in a more elegant way, but this is beyond the scope of this tutorial.
- Ключевое слово double обозначает тип числа, который поддерживает десятичные числа. The double keyword denotes a type of number that supports decimals. Таким образом, калькулятор может выполнять математические операции с десятичными и целыми числами. This way, the calculator can handle both decimal math and integer math. Функция Calculate должна всегда возвращать такое число из-за типа double в самом начале кода (обозначает возвращаемый тип функции), поэтому даже в случае по умолчанию возвращается значение 0,0. The Calculate function is required to always return such a number due to the double at the very start of the code (this denotes the function’s return type), which is why we return 0.0 even in the default case.
- H-файл объявляет функцию prototype, которая заранее сообщает компилятору, какой параметр требуется и какой тип возвращаемого значения следует ожидать. The .h file declares the function prototype, which tells the compiler upfront what parameters it requires, and what return type to expect from it. CPP-файл содержит все сведения о реализации этой функции. The .cpp file has all the implementation details of the function.
Если построить и запустить код еще раз на этом этапе, он по-прежнему завершит работу после запроса операции для выполнения. If you build and run the code again at this point, it will still exit after asking which operation to perform. Далее вам нужно изменить функцию main для выполнения вычислений. Next, you’ll modify the main function to do some calculations.
Вызов функций-членов класса Calculator To call the Calculator class member functions
Теперь давайте изменим функцию main в CalculatorTutorial.cpp: Now let’s update the main function in CalculatorTutorial.cpp:
Пояснения к коду Understanding the code
- Так как программы C++ всегда запускаются с функции main() , нам нужно вызвать из нее другой, для чего нужен оператор #include . Since C++ programs always start at the main() function, we need to call our other code from there, so a #include statement is needed.
- Объявлены начальные переменные x , y , oper и result для хранения, соответственно, первого числа, второго числа, оператора и окончательного результата. Some initial variables x , y , oper , and result are declared to store the first number, second number, operator, and final result, respectively. Рекомендуется всегда присваивать им некоторые начальные значения, чтобы избежать неопределенного поведения. Это мы здесь и делаем. It is always good practice to give them some initial values to avoid undefined behavior, which is what is done here.
- Строка Calculator c; объявляет объект «c» в качестве экземпляра класса Calculator . The Calculator c; line declares an object named ‘c’ as an instance of the Calculator class. Сам класс является лишь схемой для описания работы калькуляторов, а объект — это конкретный калькулятор, который выполняет вычисления. The class itself is just a blueprint for how calculators work; the object is the specific calculator that does the math.
- Оператор while (true) является циклом. The while (true) statement is a loop. Код внутри этого цикла продолжает выполняться снова и снова, пока выполняется условие в () . The code inside the loop continues to execute over and over again as long as the condition inside the () holds true. Так как условие просто указано как true , оно всегда выполняется, поэтому цикл выполняется бесконечно. Since the condition is simply listed as true , it’s always true, so the loop runs forever. Чтобы закрыть программу, пользователю нужно вручную закрыть окно консоли. To close the program, the user must manually close the console window. В противном случае программа будет постоянно ожидать новые входные данные. Otherwise, the program always waits for new input.
- Ключевое слово cin используется для получения входных данных от пользователя. The cin keyword is used to accept input from the user. Этот входной поток способен обработать строку текста, введенного в окне консоли, и поместить ее внутрь каждой из перечисленных переменных в указанном порядке, при условии, что введенные пользователем данные соответствуют требуемой спецификации. This input stream is smart enough to process a line of text entered in the console window and place it inside each of the variables listed, in order, assuming the user input matches the required specification. Вы можете изменить эту строку, чтобы принять другие типы входных данных, например, больше двух чисел, однако для этого также потребуется изменить функцию Calculate() . You can modify this line to accept different types of input, for instance, more than two numbers, though the Calculate() function would also need to be updated to handle this.
- Выражение c.Calculate(x, oper, y); вызывает определенную ранее функцию Calculate и предоставляет введенные входные значения. The c.Calculate(x, oper, y); expression calls the Calculate function defined earlier, and supplies the entered input values. Затем она возвращает число, сохраняемое в result . The function then returns a number that gets stored in result .
- Наконец, в консоль выводится result , благодаря чему пользователь видит результат вычисления. Finally, result is printed to the console, so the user sees the result of the calculation.
Повторная сборка и проверка кода Build and test the code again
Пришло время снова протестировать программу еще раз, чтобы убедиться в ее правильной работе. Now it’s time to test the program again to make sure everything works properly.
Нажмите клавиши CTRL+F5, чтобы перестроить и запустить приложение. Press Ctrl+F5 to rebuild and start the app.
Введите 5 + 5 и нажмите клавишу ВВОД. Enter 5 + 5 , and press Enter. Убедитесь, что выводится результат 10. Verify that the result is 10.
Отладка приложения Debug the app
Так как пользователь может ввести в окне консоли что угодно, нужно убедиться, что калькулятор обрабатывает некоторые входные данные правильно. Since the user is free to type anything into the console window, let’s make sure the calculator handles some input as expected. Вместо запуска программы давайте выполним ее отладку, чтобы можно было проверить ее выполнение шаг за шагом. Instead of running the program, let’s debug it instead, so we can inspect what it’s doing in detail, step-by-step.
Запуск приложения в отладчике To run the app in the debugger
Установите точку останова на строке result = c.Calculate(x, oper, y); , сразу после запроса входных данных у пользователя. Set a breakpoint on the result = c.Calculate(x, oper, y); line, just after the user was asked for input. Чтобы задать точку останова, щелкните рядом со строкой серую вертикальную панель, идущую вдоль левой части окна редактора. To set the breakpoint, click next to the line in the gray vertical bar along the left edge of the editor window. Появится красная точка. A red dot appears.
Теперь при отладке программа всегда приостанавливает выполнение на этой строке. Now when we debug the program, it always pauses execution at that line. Мы уже имеем примерное представление о том, что в простых случаях программа работает. We already have a rough idea that the program works for simple cases. Так как нам не нужно приостанавливать выполнение при каждом запуске, создадим условную точку останова. Since we don’t want to pause execution every time, let’s make the breakpoint conditional.
Щелкните правой кнопкой мыши красную точку, обозначающую точку останова, и выберите команду Условия. Right-click the red dot that represents the breakpoint, and choose Conditions. В поле ввода для условия введите (y == 0) && (oper == ‘/’) . In the edit box for the condition, enter (y == 0) && (oper == ‘/’) . По завершении операции нажмите кнопку Закрыть. Choose the Close button when you’re done. Условия сохранятся автоматически. The condition is saved automatically.
Теперь выполнение приостанавливается в точке останова, в частности при попытке деления на 0. Now we pause execution at the breakpoint specifically if a division by 0 is attempted.
Чтобы отладить программу, нажмите клавишу F5 или выберите Локальный отладчик Windows — кнопку панели инструментов со значком зеленой стрелки. To debug the program, press F5, or choose the Local Windows Debugger toolbar button that has the green arrow icon. Если ввести в консольном приложении нечто вроде «5 — 0», программа работает как обычно и продолжает выполнение. In your console app, if you enter something like «5 — 0», the program behaves normally and keeps running. Но если ввести «10 / 0», она приостанавливает выполнение в точке останова. However, if you type «10 / 0», it pauses at the breakpoint. Вы можете ввести любое число пробелов между оператором и числами; функция cin достаточно интеллектуальна для того, чтобы правильно проанализировать входные данные. You can even put any number of spaces between the operator and numbers; cin is smart enough to parse the input appropriately.
Полезные окна в отладчике Useful windows in the debugger
Каждый раз при отладке кода вы можете заметить, что появляется несколько новых окон. Whenever you debug your code, you may notice that some new windows appear. Они могут оказаться полезными в процессе отладки. These windows can assist your debugging experience. Давайте рассмотрим окно Видимые. Take a look at the Autos window. Окно Видимые содержит текущие значения переменных, используемых по меньшей мере за три строки перед текущей строкой. The Autos window shows you the current values of variables used at least three lines before and up to the current line.
Чтобы просмотреть все переменные из этой функции, переключитесь в окно Локальные. To see all of the variables from that function, switch to the Locals window. Вы можете изменять значения этих переменных во время отладки, чтобы оценить их влияние на программу. You can actually modify the values of these variables while debugging, to see what effect they would have on the program. В данном случае мы оставим их без изменений. In this case, we’ll leave them alone.
Кроме того, вы можете просто навести указатель на переменные в самом коде, чтобы просмотреть их текущие значения на участке, где приостановлено выполнение. You can also just hover over variables in the code itself to see their current values where the execution is currently paused. Сначала щелкните окно редактора, чтобы сделать его активным. Make sure the editor window is in focus by clicking on it first.
Продолжение отладки To continue debugging
Желтая линия слева показывает текущую точку выполнения. The yellow line on the left shows the current point of execution. Текущая строка вызывает Calculate , поэтому нажмите клавишу F11, чтобы выполнить Шаг с заходом для этой функции. The current line calls Calculate , so press F11 to Step Into the function. Вы переходите в тело функции Calculate . You’ll find yourself in the body of the Calculate function. Обдуманно применяйте функцию Шаг с заходом, чтобы не терять время из-за чрезмерного ее использования. Be careful with Step Into; if you do it too much, you may waste a lot of time. С помощью функции анализируется любой код, используемый в текущей строке, включая стандартные функции библиотеки. It goes into any code you use on the line you are on, including standard library functions.
Теперь, когда точка выполнения находится в начале функции Calculate , нажмите клавишу F10 для перехода на следующую строку в рамках выполнения программы. Now that the point of execution is at the start of the Calculate function, press F10 to move to the next line in the program’s execution. При нажатии клавиши F10 активируется функция Шаг с обходом. F10 is also known as Step Over. Шаг с обходом можно использовать для перемещения по строкам, не вдаваясь в подробности того, что происходит в каждой части строки. You can use Step Over to move from line to line, without delving into the details of what is occurring in each part of the line. В общем случае следует использовать Шаг с обходом, а не Шаг с заходом, если только вы не хотите подробно изучить код, вызываемый из другого расположения (как в случае с переходом к телу функции Calculate ). In general you should use Step Over instead of Step Into, unless you want to dive more deeply into code that is being called from elsewhere (as you did to reach the body of Calculate ).
Продолжайте использовать клавишу F10, чтобы выполнять Шаг с обходом для каждой строки, пока не вернетесь к функции main() в другом файле, и остановитесь на строке cout . Continue using F10 to Step Over each line until you get back to the main() function in the other file, and stop on the cout line.
Похоже, программа работает правильно — принимает первое число и делит его на второе. It looks like the program is doing what is expected: it takes the first number, and divides it by the second. В строке cout наведите указатель мыши на переменную result или взгляните на result в окне Видимые. On the cout line, hover over the result variable or take a look at result in the Autos window. Соответствующее значение отображается как inf. Это неправильное поведение, и нужно его скорректировать. You’ll see its value is listed as «inf», which doesn’t look right, so let’s fix it. В строке cout просто выводится любое значение, хранящееся в result . Поэтому при продвижении еще на один шаг с помощью клавиши F10 в окне консоли отображается следующее: The cout line just outputs whatever value is stored in result , so when you step one more line forward using F10, the console window displays:
Причина такого результата в том, что деление на ноль является неопределенным, поэтому у программы нет числового ответа на запрошенную операцию. This result happens because division by zero is undefined, so the program doesn’t have a numerical answer to the requested operation.
Исправление ошибки деления на ноль To fix the «divide by zero» error
Давайте обеспечим корректную обработку деления на ноль, чтобы пользователь мог осознать проблему. Let’s handle division by zero more gracefully, so a user can understand the problem.
Внесите следующие изменения в CalculatorTutorial.cpp. Make the following changes in CalculatorTutorial.cpp. (Прерывать выполнение программы при редактировании не требуется благодаря функции отладчика Изменить и продолжить): (You can leave the program running as you edit, thanks to a debugger feature called Edit and Continue):
Теперь нажмите клавишу F5 один раз. Now press F5 once. При этом выполнение программы продолжается вплоть до приостановки для запроса данных, вводимых пользователем. Program execution continues all the way until it has to pause to ask for user input. Снова введите 10 / 0 . Enter 10 / 0 again. Теперь выводится более информативное сообщение. Now, a more helpful message is printed. У пользователя запрашиваются дополнительные входные данные, и программа продолжает выполнение в обычном режиме. The user is asked for more input, and the program continues executing normally.
При редактировании кода в режиме отладки существует риск того, что код устареет. When you edit code while in debugging mode, there is a risk of code becoming stale. Это происходит, когда отладчик продолжает выполнять старый код, не учитывающий внесенные вами изменения. This happens when the debugger is still running your old code, and has not yet updated it with your changes. В подобной ситуации отладчик выводит диалоговое окно с соответствующим сообщением. The debugger pops up a dialog to inform you when this happens. В некоторых случаях может потребоваться нажать клавишу F5, чтобы обновить выполняемый код. Sometimes, you may need to press F5 to refresh the code being executed. В частности, если вы вносите изменения внутри функции, когда точка выполнения находится внутри этой же функции, вам потребуется выполнить шаг с выходом из функции, а затем вернуться в нее, чтобы получить обновленный код. In particular, if you make a change inside a function while the point of execution is inside that function, you’ll need to step out of the function, then back into it again to get the updated code. Если по какой-либо причине это не работает и вы видите сообщение об ошибке, можно остановить отладку, щелкнув красный квадрат на панели инструментов под меню в верхней части интегрированной среды разработки, а затем перезапустить отладку, нажав клавишу F5 или выбрав зеленую стрелку «воспроизведения» рядом с кнопкой остановки на панели инструментов. If that doesn’t work for some reason and you see an error message, you can stop debugging by clicking on the red square in the toolbar under the menus at the top of the IDE, then start debugging again by entering F5 or by choosing the green «play» arrow beside the stop button on the toolbar.
Пояснения по сочетаниям клавиш для выполнения и отладки Understanding the Run and Debug shortcuts
- Клавиша F5 (или команда Отладка >Запустить отладку) запускает сеанс отладки, если он еще не активен, и выполняет программу до тех пор, пока не будет встречена точка останова либо программе не потребуются вводимые пользователем данные. F5 (or Debug >Start Debugging) starts a debugging session if one isn’t already active, and runs the program until a breakpoint is hit or the program needs user input. Если вводимые пользователем данные не требуются и точка останова отсутствует, программа завершает работу, а окно консоли автоматически закрывается после завершения выполнения программы. If no user input is needed and no breakpoint is available to hit, the program terminates and the console window closes itself when the program finishes running. Если вы выполняете программу уровня «Hello World», используйте сочетание клавиш CTRL+F5 или задайте точку останова перед нажатием клавиши F5, чтобы окно оставалось открытым. If you have something like a «Hello World» program to run, use Ctrl+F5 or set a breakpoint before you enter F5 to keep the window open.
- Сочетание клавиш CTRL+F5 (или команда Отладка >Запуск без отладки) запускает приложение без перехода в режим отладки. Ctrl+F5 (or Debug >Start Without Debugging) runs the application without going into debug mode. Это немного быстрее отладки, а окно консоли остается открытым после завершения выполнения программы. This is slightly faster than debugging, and the console window stays open after the program finishes executing.
- Клавиша F10 (соответствующая возможности Шаг с обходом) позволяет выполнять построчную итерацию по коду, а также визуализировать выполнение кода и значения переменных на каждом шаге выполнения. F10 (known as Step Over) lets you iterate through code, line-by-line, and visualize how the code is run and what variable values are at each step of execution.
- Клавиша F11 (соответствующая возможности Шаг с заходом) работает аналогично возможности Шаг с обходом, за исключением того, что заходит в любые функции, вызываемые в строке выполнения. F11 (known as Step Into) works similarly to Step Over, except it steps into any functions called on the line of execution. Например, если в выполняемой строке вызывается функция, при нажатии клавиши F11 указатель перемещается в тело функции, чтобы вы могли проследить выполнение кода функции, прежде чем вернуться на исходную строку. For example, if the line being executed calls a function, pressing F11 moves the pointer into the body of the function, so you can follow the function’s code being run before coming back to the line you started at. При нажатии клавиши F10 выполняется шаг с обходом по вызову функции и простой переход на следующую строку. Вызов функции все равно выполняется, но программа не приостанавливается, чтобы показать вам, что именно она делает. Pressing F10 steps over the function call and just moves to the next line; the function call still happens, but the program doesn’t pause to show you what it’s doing.
Закрытие приложения Close the app
- Если оно все еще выполняется, закройте окно консоли для приложения калькулятора. If it’s still running, close the console window for the calculator app.
Готовое приложение The finished app
Поздравляем! Congratulations! Вы завершили написание кода для приложения калькулятора, а также выполнили его сборку и отладку в Visual Studio. You’ve completed the code for the calculator app, and built and debugged it in Visual Studio.