Creación de una calculadora de consola en C++
El punto de partida habitual para un programador de C++ es una aplicación "Hola mundo" que se ejecuta en la línea de comandos. Esto es lo que creará primero en Visual Studio si sigue este artículo. Después, pasaremos a algo más complicado: una aplicación de calculadora.
Requisitos previos
- Instalar y ejecutar Visual Studio con la carga de trabajo Desarrollo para el escritorio con C++ en el equipo. Si todavía no está instalada, vea Instalar compatibilidad con C++ en Visual Studio.
Creación del proyecto de aplicación
Visual Studio usa proyectos para organizar el código de una aplicación y soluciones para organizar los proyectos. Un proyecto contiene todas las opciones, las configuraciones y las reglas que se usan para compilar las aplicaciones. También sirve para administrar la relación entre todos los archivos del proyecto y cualquier archivo externo. Para crear la aplicación, primero tendrá que crear un proyecto y una solución.
Si acaba de iniciar Visual Studio, verá el cuadro de diálogo Inicio de Visual Studio. Elija Crear un nuevo proyecto para comenzar.

De lo contrario, en la barra de menús Visual Studio, elija Archivonuevo Project. Se abre la ventana Crear un nuevo proyecto.
En la lista de plantillas de proyecto, seleccione Aplicación de consola y Siguiente.

Importante
Asegúrese de elegir la versión de C++ de la plantilla de aplicación de consola. Tiene las etiquetas C++ , Windows y consola y el icono tiene "++" en una esquina.
En el cuadro de diálogo Configurar el nuevo proyecto, seleccione el cuadro de edición Nombre del proyecto, asigne al nuevo proyecto el nombre CalculatorTutorial y seleccione Crear.

Se crea una aplicación de consola de Windows de C++ vacía. Las aplicaciones de consola usan una ventana de consola de Windows para mostrar la salida y aceptar la entrada del usuario. En Visual Studio, se abre una ventana del editor en la que se muestra el código generado:
// 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
Compruebe que la nueva aplicación se compila y ejecuta
La plantilla para una nueva aplicación de consola de Windows crea una sencilla aplicación "Hola mundo" de C++. En este momento, puede ver cómo Visual Studio compila y ejecuta las aplicaciones que crea directamente desde el IDE.
Para compilar el proyecto, seleccione Compilar solución en el menú Compilar. En la ventana Salida se muestran los resultados del proceso de compilación.

Para ejecutar el código, en la barra de menús, seleccione Depurar, Iniciar sin depurar.

Se abre una ventana de consola y después se ejecuta la aplicación. Al iniciar una aplicación de consola en Visual Studio, se ejecuta el código y se muestra el mensaje "Presione cualquier tecla para cerrar esta ventana. . . "" para darle la oportunidad de ver la salida. ¡Enhorabuena! Ha creado su primera aplicación de consola "Hello, world!" en Visual Studio.
Presione una tecla para cerrar la ventana de la consola y volver a Visual Studio.
Ahora tiene las herramientas para compilar y ejecutar la aplicación después de cada cambio, para comprobar que el código sigue funcionando según lo esperado. Más adelante, se mostrará cómo depurarlo si no funciona.
Edición del código
Ahora, el código de esta plantilla se va a convertir en una aplicación de calculadora.
En el archivo CalculatorTutorial.cpp, modifique el código para que coincida con este ejemplo:
// 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 fileDescripción del código:
- Las instrucciones
#includepermiten hacer referencia a código que se encuentra en otros archivos. En ocasiones, es posible que vea un nombre de archivo incluido entre corchetes angulares ( <> ); en otras, estará rodeado por comillas ( <> ). En general, los corchetes angulares se usan al hacer referencia a la biblioteca C++ Standard, mientras que las comillas se usan para otros archivos. - La línea
using namespace std;indica al compilador que espere que en este archivo se usen elementos de la biblioteca C++ Standard. Sin esta línea, cada palabra clave de la biblioteca tendría que ir precedida destd::, para denotar su ámbito. Por ejemplo, sin esa línea, cada referencia acoutse tendría que escribir comostd::cout. La instrucciónusingse agrega para que el código parezca más limpio. - La palabra clave
coutse usa para imprimir en la salida estándar de C++. El operador << indica al compilador que envíe a la salida estándar todo lo que esté a su derecha. - La palabra clave endl es similar a la tecla Entrar; finaliza la línea y mueve el cursor a la siguiente. Un procedimiento recomendado consiste en colocar un elemento
\ndentro de una cadena (entre "") para hacer lo mismo, ya queendlsiempre vacía el búfer y puede afectar al rendimiento del programa, pero como esta aplicación es muy pequeña, en su lugar se usaendlpara mejorar la legibilidad. - Todas las instrucciones de C++ deben terminar en punto y coma, y todas las aplicaciones de C++ deben contener una función
main(). Esta función es lo que el programa ejecuta al inicio. Todo el código debe ser accesible desdemain()para que se pueda usar.
- Las instrucciones
Para guardar el archivo, presione Ctrl+S, o bien haga clic en el icono Guardar situado cerca de la parte superior del IDE, el icono de disco de la barra de herramientas en la barra de menús.
Para ejecutar la aplicación, presione Ctrl+F5, o bien vaya al menú Depurar y seleccione Iniciar sin depurar. Debería ver aparecer una ventana de consola que muestra el texto especificado en el código.
Cuando haya terminado, cierre la ventana de la consola.
Adición de código para realizar cálculos matemáticos
Es el momento de agregar cierta lógica matemática.
Para agregar una clase Calculator
Vaya al menú Proyecto y seleccione Agregar clase. En el cuadro de edición Nombre de clase, escriba Calculator. Elija Aceptar. Se agregan dos nuevos archivos al proyecto. Para guardar todos los archivos modificados a la vez, presione Ctrl+Mayús+S. Es un método abreviado de teclado para ArchivoGuardar todo. También hay un botón de la barra de herramientas para Guardar todo, un icono de dos discos, que se encuentra junto al botón Guardar. En general, se recomienda Guardar todo con frecuencia, para no perder ningún archivo al guardar.

Una clase es como un plano técnico para un objeto que realiza una acción. En este caso, se define una calculadora y cómo debería funcionar. El asistente Agregar clase que ha usado anteriormente ha creado archivos .h y .cpp con el mismo nombre que la clase. Puede ver una lista completa de los archivos del proyecto en la ventana Explorador de soluciones visible en el lateral del IDE. Si la ventana no está visible, puede abrirla desde la barra de menús: elija Ver Explorador de soluciones.

Ahora debería tener tres pestañas abiertas en el editor: CalculatorTutorial.cpp, Calculator.h y Calculator.cpp. Si cierra accidentalmente una de estas pestañas, puede volver a abrirla si hace doble clic en ella en la ventana Explorador de soluciones.
En Calculator.h, quite las líneas y que se generaron, ya que no las necesitará
~Calculator();aquí. A continuación, agregue la línea de código siguiente para que el archivo tenga este aspecto:#pragma once class Calculator { public: double Calculate(double x, char oper, double y); };Descripción del código
- En la línea que ha agregado se declara una función nueva llamada
Calculate, que se usará para ejecutar las operaciones matemáticas de suma, resta, multiplicación y división. - El código de C++ se organiza en archivos de encabezado (.h) y de origen (.cpp). Otros compiladores admiten otras extensiones de archivo, pero estas son las principales que debe conocer. Normalmente, las funciones y variables se declaran, es decir, se les asigna un nombre y un tipo, en los archivos de encabezado, y se implementan (se les asigna una definición) en los archivos de origen. Para acceder al código definido en otro archivo, puede usar
#include "filename.h", donde "filename.h" es el nombre del archivo que declara las variables o funciones que quiere usar. - En las dos líneas que ha eliminado se declaraba un constructor y un destructor para la clase. Para una clase sencilla como esta, el compilador los crea de forma automática, y sus usos quedan fuera del ámbito de este tutorial.
- Es recomendable organizar el código en distintos archivos según lo que haga, para que después sea más sencillo encontrar el código que necesita. En este caso, la clase
Calculatorse define de forma independiente al archivo que contiene la funciónmain(), pero el objetivo es hacer referencia a la claseCalculatorenmain().
- En la línea que ha agregado se declara una función nueva llamada
Aparecerá un subrayado ondulado de color verde debajo de
Calculate. Esto se debe a que no se ha definido la funciónCalculateen el archivo .cpp. Mueva el puntero sobre la palabra, haga clic en la bombilla que aparece (en este caso, un destornillador) y seleccione Crear definición de "Calculate" en Calculator.cpp.
muestra la opción Create definition of Calculate in Calculator C P (Crear definición de Calculate in Calculator C P P) resaltada. Aparecerá un mensaje emergente en el que se ofrece una vista del cambio de código que se ha realizado en el otro archivo. El código se ha agregado a Calculator.cpp.

En la actualidad, solo devuelve 0,0. Vamos a cambiarlo. Presione Esc para cerrar la ventana emergente.
Cambie al archivo Calculator.cpp en la ventana del editor. Quite las secciones
Calculator()y~Calculator()(como en el archivo .h) y agregue el código siguiente aCalculate():#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; } }Descripción del código
- La función
Calculateconsume un número, un operador y un segundo número, y después realiza la operación solicitada en los números. - La instrucción switch comprueba qué operador se ha proporcionado y solo ejecuta el caso correspondiente a esa operación. El valor predeterminado: case es una reserva en caso de que el usuario escriba un operador que no se acepta, para que el programa no se interrumpa. En general, se recomienda controlar la entrada no válida del usuario de una manera más elegante, pero esto queda fuera del ámbito de este tutorial.
- La palabra clave
doubledenota un tipo de número que admite decimales. De este modo, la calculadora puede realizar operaciones matemáticas decimales y enteras. Es necesario que la funciónCalculatesiempre devuelva un número como este debido a la presencia dedoubleal principio del código (lo que denota el tipo de valor devuelto de la función), motivo por el que se devuelve 0,0 incluso en el caso predeterminado. - En el archivo .h se declara el prototipo de la función, que indica al compilador por adelantado qué parámetros requiere y el tipo de valor devuelto que se puede esperar de ella. El archivo .cpp contiene todos los detalles de implementación de la función.
- La función
Si compila y ejecuta el código de nuevo en este momento, se cerrará después de preguntarle qué operación debe realizarse. A continuación, modificará la función main para realizar algunos cálculos.
Para llamar a las funciones miembro de la clase Calculator
Ahora vamos a actualizar la
mainfunciónmain:// 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; }Descripción del código
- Como los programas de C++ siempre comienzan por la función
main(), es necesario llamar al otro código desde ahí, por lo que se necesitará una instrucción#include. - Se declaran varias variables iniciales (
x,y,operyresult) para almacenar el primer número, el segundo, el operador y el resultado final, respectivamente. Siempre es aconsejable asignarles valores iniciales para evitar un comportamiento indefinido, que es lo que se hace aquí. - En la línea
Calculator c;se declara un objeto denominado "c" como una instancia de la claseCalculator. La propia clase es solo un plano técnico del funcionamiento de las calculadoras; el objeto es la calculadora concreta que realiza los cálculos matemáticos. - La instrucción
while (true)es un bucle. El código que contiene el bucle se sigue ejecutando repetidamente mientras la condición dentro de()sea true. Como la condición aparece simplemente comotrue, siempre es true, por lo que el bucle se ejecuta de forma indefinida. Para cerrar el programa, el usuario debe cerrar manualmente la ventana de la consola. En caso contrario, el programa siempre espera una entrada nueva. - La palabra clave
cinse usa para aceptar la entrada del usuario. Esta secuencia de entrada es lo suficientemente inteligente como para procesar una línea de texto especificado en la ventana de consola y colocarla dentro de cada una de las variables enumeradas, en orden, siempre que la entrada del usuario coincida con la especificación necesaria. Puede modificar esta línea para que acepte otros tipos de entrada, por ejemplo, más de dos números, aunque también se tendría que actualizar la funciónCalculate()para que lo procesara. - La expresión
c.Calculate(x, oper, y);llama a la funciónCalculatedefinida anteriormente y proporciona los valores de entrada especificados. Después, la función devuelve un número que se almacena enresult. - Por último, se imprime
resulten la consola, para que el usuario vea el resultado del cálculo.
- Como los programas de C++ siempre comienzan por la función
Volver a compilar y probar el código
Ahora es el momento de volver a probar el programa para asegurarse de que todo funciona correctamente.
Presione Ctrl+F5 para recompilar e iniciar la aplicación.
Escriba
5 + 5y presione5 + 5Compruebe que el resultado es 10.
Depurar la aplicación
Como el usuario tiene libertad para escribir lo que quiera en la ventana de la consola, nos aseguraremos de que la calculadora controla las entradas según lo previsto. En lugar de ejecutar el programa, se va a depurar, para poder inspeccionar con detalle lo que hace, paso a paso.
Para ejecutar la aplicación en el depurador
Establezca un punto de interrupción en la línea
result = c.Calculate(x, oper, y);, justo después de que se haya solicitado la entrada al usuario. Para ello, haga clic en la línea en la barra vertical de color gris del borde izquierdo de la ventana del editor. Aparece un punto rojo.
Ahora, cuando se depure el programa, la ejecución siempre se detendrá en esa línea. Ya tenemos una idea aproximada de que el programa funciona para casos sencillos. Ya que no queremos pausar la ejecución cada vez, vamos a hacer condicional un punto de interrupción.
Haga clic con el botón derecho en el punto de color rojo que representa el punto de interrupción y seleccione Condiciones. En el cuadro de edición para la condición, escriba
(y == 0) && (oper == '/'). Elija el botón Cerrar cuando haya terminado. La condición se guarda automáticamente.
que muestra la sección Punto de interrupción Configuración y una condición agregada al valor Es true. Ahora, la ejecución se detiene en el punto de interrupción solo si se intenta realizar una división por 0.
Para depurar el programa, presione F5 o haga clic en el botón de la barra de herramientas Depurador local de Windows con el icono de flecha de color verde. En la aplicación de consola, si escribe algo parecido a "5 - 0", el programa se comporta con normalidad y se sigue ejecutando. Pero si escribe "10 / 0", se detiene en el punto de interrupción. Incluso puede agregar cualquier número de espacios entre el operador y los números;
cines lo suficientemente inteligente como para analizar la entrada de forma adecuada.
Ventanas útiles del depurador
Cada vez que se depura el código, es posible que observe que aparecen ventanas nuevas. Estas ventanas pueden ayudar a la experiencia de depuración. Fíjese en la ventana Automático. En la ventana Automático se muestran los valores actuales de las variables que se han usado al menos tres líneas antes y hasta la línea actual. Para ver todas las variables de esa función, cambie a la ventana Variables locales. En realidad puede modificar los valores de estas variables durante la depuración, para ver qué efecto tienen en el programa. En este caso, se dejarán como están.

También puede mantener el puntero sobre las variables en el propio código para ver sus valores actuales en donde se detiene la ejecución. Para asegurarse de que la ventana del editor tiene el foco, haga clic en ella primero.
la información sobre herramientas que aparece mostrando el valor de la variable.
Para continuar la depuración
En la línea de color amarillo de la izquierda se muestra el punto de ejecución actual. La línea actual llama
Calculatea , por lo que presioneCalculatepara ir paso a paso por instrucciones en la función . Se encontrará en el cuerpo de la funciónCalculate. Tenga cuidado con Depurar paso a paso por instrucciones; si lo ejecuta demasiado, puede perder mucho tiempo. Pasa por cualquier código que se utilice en la línea en la que se encuentre, incluidas las funciones de biblioteca estándar.Ahora que el punto de ejecución está al principio de la función, presione
CalculateCalculatepara ir a la siguiente línea de la ejecución del programa. F10 también se conoce como Depurar paso a paso por procedimientos. Se puede usar Depurar paso a paso por procedimientos para pasar de una línea a otra, sin profundizar en los detalles de lo que ocurre en cada elemento de la línea. En general, debe usar Paso a paso por instrucciones en lugar de Paso a paso por instrucciones ,a menos que desee profundizar más en el código al que se llama desde otro lugar (como hizo para llegar al cuerpo de ).Siga usando F10 para pasar por alto cada línea hasta que vuelva a la función en el otro archivo y se detenga en la línea.
Parece que el programa hace lo que se espera: toma el primer número y lo divide por el segundo. En la
coutlínea, mantenga el puntero sobreresultla variable o mire en laresultcoutAutomático. Verá que su valor se muestra como "inf", que no se ve bien, así que vamos a arreglarlo. La línea simplemente genera el valor almacenado en , por lo que cuando se avanza una línea más mediantecoutresultcoutse muestra la ventana de consola:
Este resultado sucede porque la división por cero no está definida, por lo que el programa no tiene una respuesta numérica a la operación solicitada.
Para corregir el error de "división por cero"
Vamos a controlar la división por cero de forma más elegante, para que un usuario pueda entender el problema.
Realice los cambios siguientes en CalculatorTutorial.cpp. (Puede dejar el programa en ejecución mientras realiza los cambios, gracias a una característica del depurador denominada Editar y continuar):
// 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; }Ahora presione F5 una vez. La ejecución del programa continúa hasta que tiene que detenerse para solicitar la entrada del usuario. Vuelva a escribir
10 / 0. Ahora, se imprime un mensaje más útil. Al usuario se le solicita una entrada adicional y el programa se continúa ejecutando con normalidad.
Nota
Cuando se edita código en modo de depuración, hay riesgo de que se vuelva obsoleto. Esto sucede cuando el depurador sigue ejecutando el código antiguo y todavía no se ha actualizado con los cambios. El depurador abre un cuadro de diálogo en el que se le informará cuando esto ocurra. En ocasiones, es posible que deba presionar F5 para actualizar el código que se está ejecutando. En concreto, si realiza un cambio dentro de una función mientras el punto de ejecución está dentro de ella, tendrá que depurarla paso a paso por procedimientos y después volver a acceder a la función para obtener el código actualizado. Si por algún motivo eso no funciona y ve un mensaje de error, puede detener la depuración si hace clic en el cuadrado de color rojo de la barra de herramientas situada bajo los menús de la parte superior del IDE y después presionar F5 o hacer clic en la flecha "Reproducir" de color verde situada junto al botón de detención en la barra de herramientas para volver a iniciar la depuración.
Descripción de los métodos abreviados de Ejecutar y Depurar
- F5 (o Depurar iniciar depuración) inicia una sesión de depuración si aún no hay ninguna activa y ejecuta el programa hasta que se encuentra un punto de interrupción o el programa necesita la entrada del usuario. Si no se necesita la entrada del usuario y no hay ningún punto de interrupción disponible, el programa finaliza y la ventana de la consola se cierra de forma automática cuando el programa termina de ejecutarse. Si tiene algo parecido a un programa "Hola mundo" para ejecutar, presione Ctrl+F5 o establezca un punto de interrupción antes de presionar F5 para mantener abierta la ventana.
- Ctrl+F5 (o Iniciar depuraciónsin depurar)ejecuta la aplicación sin entrar en modo de depuración. Esto es ligeramente más rápido que la depuración y la ventana de la consola permanece abierta después de que el programa termine de ejecutarse.
- F10 (conocido como Depurar paso a paso por procedimientos) permite iterar por el código línea a línea y visualizar cómo se ejecuta y cuáles son los valores de variable en cada paso de la ejecución.
- F11 (conocido como Depurar paso a paso por instrucciones) funciona de forma similar a Depurar paso a paso por procedimientos, con la excepción de que depura paso a paso por procedimientos las funciones a las que se llama en la línea de ejecución. Por ejemplo, si la línea que se está ejecutando llama a una función, al presionar F11 el puntero se desplaza al cuerpo de la función, para que pueda seguir la ejecución del código de la función antes de volver a la línea de partida. Al presionar F10 la llamada de función se depura paso a paso por instrucciones y simplemente pasa a la línea siguiente; la llamada de función se sigue produciendo, pero el programa no se detiene para mostrarle lo que está haciendo.
Cierre la aplicación
- Si sigue en ejecución, cierre la ventana de la consola de la aplicación de calculadora.
Adición de control de código fuente Git
Ahora que ha creado una aplicación, es posible que quiera agregarla a un repositorio de Git. Tenemos lo que necesita. Visual Studio facilita el proceso con las herramientas de Git que puede usar directamente desde el IDE.
Sugerencia
Git es el sistema de control de versiones moderno más usado, por lo que, tanto si es un desarrollador profesional como si está aprendiendo a codificar, Git puede ser muy útil. Si ha empezado a usar Git recientemente, el sitio web https://git-scm.com/ es un buen punto de partida. Allí encontrará hojas de referencia rápida, un libro en línea conocido y vídeos de conceptos básicos de Git.
Para asociar el código a Git, empiece por crear un nuevo repositorio de Git donde se encuentra el código. A continuación se muestra cómo hacerlo:
En la barra de estado de la esquina inferior derecha de Visual Studio, seleccione Agregar al control de código fuente y, a continuación, Git.
Cuadro de diálogo Crear un repositorio GIT inicie sesión en GitHub.
El nombre del repositorio se rellena automáticamente en función de la ubicación de la carpeta. De forma predeterminada, el nuevo repositorio es privado, lo que significa que usted es el único que puede acceder a él.
Sugerencia
Tanto si el repositorio es público como privado, es mejor tener una copia de seguridad remota del código almacenada de forma segura en GitHub. Incluso si no trabaja con un equipo, un repositorio remoto pone el código a su disposición desde cualquier equipo.
Seleccione Crear e insertar.
Después de crear el repositorio, verá los detalles de estado en la barra de estado.
El primer icono con las flechas muestra cuántas confirmaciones salientes o entrantes hay en la rama actual. Puede usar este icono para extraer las confirmaciones entrantes o insertar las confirmaciones salientes. Puede elegir ver estas confirmaciones en primer lugar. Para ello, seleccione el icono y, a continuación, Ver salientes y entrantes.
El segundo icono con el lápiz muestra el número de cambios no confirmados en el código. Puede seleccionar este icono para ver esos cambios en la ventana Cambios de Git.
Para obtener más información sobre cómo usar Git con la aplicación, consulte la documentación del control de versiones de Visual Studio.
La aplicación finalizada
¡Enhorabuena! Ha completado el código de la aplicación de calculadora, lo ha compilado y depurado y lo ha agregado a un repositorio, todo en Visual Studio.
Pasos siguientes
El punto de partida habitual para un programador de C++ es una aplicación "Hola mundo" que se ejecuta en la línea de comandos. Esto es lo que creará en Visual Studio en este artículo. Después, pasaremos a algo más complicado: una aplicación de calculadora.
Requisitos previos
- Instalar y ejecutar Visual Studio con la carga de trabajo Desarrollo para el escritorio con C++ en el equipo. Si todavía no está instalada, vea Instalar compatibilidad con C++ en Visual Studio.
Creación del proyecto de aplicación
Visual Studio usa proyectos para organizar el código de una aplicación y soluciones para organizar los proyectos. Un proyecto contiene todas las opciones, las configuraciones y las reglas que se usan para compilar las aplicaciones. También sirve para administrar la relación entre todos los archivos del proyecto y cualquier archivo externo. Para crear la aplicación, primero tendrá que crear un proyecto y una solución.
En la barra de menús Visual Studio, elija ArchivonuevoProject. Se abrirá la ventana Nuevo proyecto.
En la barra lateral de la izquierda, asegúrese de que Visual C++ está seleccionado. En el centro, haga clic en Aplicación de consola de Windows.
En el cuadro de edición Nombre de la parte inferior, asigne el nombre CalculatorTutorial al nuevo proyecto y, después, haga clic en Aceptar.

Se crea una aplicación de consola de Windows de C++ vacía. Las aplicaciones de consola usan una ventana de consola de Windows para mostrar la salida y aceptar la entrada del usuario. En Visual Studio, se abre una ventana del editor en la que se muestra el código generado:
// CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there. // #include "pch.h" #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
Compruebe que la nueva aplicación se compila y ejecuta
La plantilla para una nueva aplicación de consola de Windows crea una sencilla aplicación "Hola mundo" de C++. En este momento, puede ver cómo Visual Studio compila y ejecuta las aplicaciones que crea directamente desde el IDE.
Para compilar el proyecto, seleccione Compilar solución en el menú Compilar. En la ventana Salida se muestran los resultados del proceso de compilación.

Para ejecutar el código, en la barra de menús, seleccione Depurar, Iniciar sin depurar.

Se abre una ventana de consola y después se ejecuta la aplicación. Al iniciar una aplicación de consola en Visual Studio, ejecuta el código y después imprime "Presione cualquier tecla para continuar . "" para darle la oportunidad de ver la salida. ¡Enhorabuena! Ha creado su primera aplicación de consola "Hello, world!" en Visual Studio.
Presione una tecla para cerrar la ventana de la consola y volver a Visual Studio.
Ahora tiene las herramientas para compilar y ejecutar la aplicación después de cada cambio, para comprobar que el código sigue funcionando según lo esperado. Más adelante, se mostrará cómo depurarlo si no funciona.
Edición del código
Ahora, el código de esta plantilla se va a convertir en una aplicación de calculadora.
En el archivo CalculatorTutorial.cpp, modifique el código para que coincida con este ejemplo:
// CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there. // #include "pch.h" #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 fileDescripción del código:
- Las instrucciones
#includepermiten hacer referencia a código que se encuentra en otros archivos. En ocasiones, es posible que vea un nombre de archivo incluido entre corchetes angulares ( <> ); en otras, estará rodeado por comillas ( <> ). En general, los corchetes angulares se usan al hacer referencia a la biblioteca C++ Standard, mientras que las comillas se usan para otros archivos. - La línea
#include "pch.h"(o en Visual Studio 2017 y versiones anteriores,#include "stdafx.h") hace referencia a algo que se conoce como un encabezado precompilado. Los programadores profesionales los suelen usar para mejorar los tiempos de compilación, pero están fuera del ámbito de este tutorial. - La línea
using namespace std;indica al compilador que espere que en este archivo se usen elementos de la biblioteca C++ Standard. Sin esta línea, cada palabra clave de la biblioteca tendría que ir precedida destd::, para denotar su ámbito. Por ejemplo, sin esa línea, cada referencia acoutse tendría que escribir comostd::cout. La instrucciónusingse agrega para que el código parezca más limpio. - La palabra clave
coutse usa para imprimir en la salida estándar de C++. El operador << indica al compilador que envíe a la salida estándar todo lo que esté a su derecha. - La palabra clave endl es similar a la tecla Entrar; finaliza la línea y mueve el cursor a la siguiente. Un procedimiento recomendado consiste en colocar un elemento
\ndentro de una cadena (entre "") para hacer lo mismo, ya queendlsiempre vacía el búfer y puede afectar al rendimiento del programa, pero como esta aplicación es muy pequeña, en su lugar se usaendlpara mejorar la legibilidad. - Todas las instrucciones de C++ deben terminar en punto y coma, y todas las aplicaciones de C++ deben contener una función
main(). Esta función es lo que el programa ejecuta al inicio. Todo el código debe ser accesible desdemain()para que se pueda usar.
- Las instrucciones
Para guardar el archivo, presione Ctrl+S, o bien haga clic en el icono Guardar situado cerca de la parte superior del IDE, el icono de disco de la barra de herramientas en la barra de menús.
Para ejecutar la aplicación, presione Ctrl+F5, o bien vaya al menú Depurar y seleccione Iniciar sin depurar. Si aparece el mensaje emergente Este proyecto no está actualizado, puede activar No volver a mostrar este cuadro de diálogo y, después, hacer clic en Sí para compilar la aplicación. Debería ver aparecer una ventana de consola que muestra el texto especificado en el código.

Cuando haya terminado, cierre la ventana de la consola.
Adición de código para realizar cálculos matemáticos
Es el momento de agregar cierta lógica matemática.
Para agregar una clase Calculator
Vaya al menú Proyecto y seleccione Agregar clase. En el cuadro de edición Nombre de clase, escriba Calculator. Elija Aceptar. Se agregan dos nuevos archivos al proyecto. Para guardar todos los archivos modificados a la vez, presione Ctrl+Mayús+S. Es un método abreviado de teclado para ArchivoGuardar todo. También hay un botón de la barra de herramientas para Guardar todo, un icono de dos discos, que se encuentra junto al botón Guardar. En general, se recomienda Guardar todo con frecuencia, para no perder ningún archivo al guardar.
al usuario que abre el cuadro de diálogo Agregar clase, escribe Calculator en el campo Nombre de clase y selecciona O K. Una clase es como un plano técnico para un objeto que realiza una acción. En este caso, se define una calculadora y cómo debería funcionar. El asistente Agregar clase que ha usado anteriormente ha creado archivos .h y .cpp con el mismo nombre que la clase. Puede ver una lista completa de los archivos del proyecto en la ventana Explorador de soluciones visible en el lateral del IDE. Si la ventana no está visible, puede abrirla desde la barra de menús: elija Ver Explorador de soluciones.

Ahora debería tener tres pestañas abiertas en el editor: CalculatorTutorial.cpp, Calculator.h y Calculator.cpp. Si cierra accidentalmente una de estas pestañas, puede volver a abrirla si hace doble clic en ella en la ventana Explorador de soluciones.
En Calculator.h, quite las líneas y que se generaron, ya que no las necesitará
~Calculator();aquí. A continuación, agregue la línea de código siguiente para que el archivo tenga este aspecto:#pragma once class Calculator { public: double Calculate(double x, char oper, double y); };Descripción del código
- En la línea que ha agregado se declara una función nueva llamada
Calculate, que se usará para ejecutar las operaciones matemáticas de suma, resta, multiplicación y división. - El código de C++ se organiza en archivos de encabezado (.h) y de origen (.cpp). Otros compiladores admiten otras extensiones de archivo, pero estas son las principales que debe conocer. Normalmente, las funciones y variables se declaran, es decir, se les asigna un nombre y un tipo, en los archivos de encabezado, y se implementan (se les asigna una definición) en los archivos de origen. Para acceder al código definido en otro archivo, puede usar
#include "filename.h", donde "filename.h" es el nombre del archivo que declara las variables o funciones que quiere usar. - En las dos líneas que ha eliminado se declaraba un constructor y un destructor para la clase. Para una clase sencilla como esta, el compilador los crea de forma automática, y sus usos quedan fuera del ámbito de este tutorial.
- Es recomendable organizar el código en distintos archivos según lo que haga, para que después sea más sencillo encontrar el código que necesita. En este caso, la clase
Calculatorse define de forma independiente al archivo que contiene la funciónmain(), pero el objetivo es hacer referencia a la claseCalculatorenmain().
- En la línea que ha agregado se declara una función nueva llamada
Aparecerá un subrayado ondulado de color verde debajo de
Calculate. Esto se debe a que no se ha definido la funciónCalculateen el archivo .cpp. Mantenga el mouse sobre la palabra, haga clic en la bombilla que aparece y seleccione Crear definición de "Calculate" en Calculator.cpp. Aparecerá un mensaje emergente en el que se ofrece una vista del cambio de código que se ha realizado en el otro archivo. El código se ha agregado a Calculator.cpp.
En la actualidad, solo devuelve 0,0. Vamos a cambiarlo. Presione Esc para cerrar la ventana emergente.
Cambie al archivo Calculator.cpp en la ventana del editor. Quite las secciones
Calculator()y~Calculator()(como en el archivo .h) y agregue el código siguiente aCalculate():#include "pch.h" #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; } }Descripción del código
- La función
Calculateconsume un número, un operador y un segundo número, y después realiza la operación solicitada en los números. - La instrucción switch comprueba qué operador se ha proporcionado y solo ejecuta el caso correspondiente a esa operación. El valor predeterminado: case es una reserva en caso de que el usuario escriba un operador que no se acepta, para que el programa no se interrumpa. En general, se recomienda controlar la entrada no válida del usuario de una manera más elegante, pero esto queda fuera del ámbito de este tutorial.
- La palabra clave
doubledenota un tipo de número que admite decimales. De este modo, la calculadora puede realizar operaciones matemáticas decimales y enteras. Es necesario que la funciónCalculatesiempre devuelva un número como este debido a la presencia dedoubleal principio del código (lo que denota el tipo de valor devuelto de la función), motivo por el que se devuelve 0,0 incluso en el caso predeterminado. - En el archivo .h se declara el prototipo de la función, que indica al compilador por adelantado qué parámetros requiere y el tipo de valor devuelto que se puede esperar de ella. El archivo .cpp contiene todos los detalles de implementación de la función.
- La función
Si compila y ejecuta el código de nuevo en este momento, se cerrará después de preguntarle qué operación debe realizarse. A continuación, modificará la función main para realizar algunos cálculos.
Para llamar a las funciones miembro de la clase Calculator
Ahora vamos a actualizar la
mainfunción enmain:// CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there. // #include "pch.h" #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; }Descripción del código
- Como los programas de C++ siempre comienzan por la función
main(), es necesario llamar al otro código desde ahí, por lo que se necesitará una instrucción#include. - Se declaran varias variables iniciales (
x,y,operyresult) para almacenar el primer número, el segundo, el operador y el resultado final, respectivamente. Siempre es aconsejable asignarles valores iniciales para evitar un comportamiento indefinido, que es lo que se hace aquí. - En la línea
Calculator c;se declara un objeto denominado "c" como una instancia de la claseCalculator. La propia clase es solo un plano técnico del funcionamiento de las calculadoras; el objeto es la calculadora concreta que realiza los cálculos matemáticos. - La instrucción
while (true)es un bucle. El código que contiene el bucle se sigue ejecutando repetidamente mientras la condición dentro de()sea true. Como la condición aparece simplemente comotrue, siempre es true, por lo que el bucle se ejecuta de forma indefinida. Para cerrar el programa, el usuario debe cerrar manualmente la ventana de la consola. En caso contrario, el programa siempre espera una entrada nueva. - La palabra clave
cinse usa para aceptar la entrada del usuario. Esta secuencia de entrada es lo suficientemente inteligente como para procesar una línea de texto especificado en la ventana de consola y colocarla dentro de cada una de las variables enumeradas, en orden, siempre que la entrada del usuario coincida con la especificación necesaria. Puede modificar esta línea para que acepte otros tipos de entrada, por ejemplo, más de dos números, aunque también se tendría que actualizar la funciónCalculate()para que lo procesara. - La expresión
c.Calculate(x, oper, y);llama a la funciónCalculatedefinida anteriormente y proporciona los valores de entrada especificados. Después, la función devuelve un número que se almacena enresult. - Por último, se imprime
resulten la consola, para que el usuario vea el resultado del cálculo.
- Como los programas de C++ siempre comienzan por la función
Volver a compilar y probar el código
Ahora es el momento de volver a probar el programa para asegurarse de que todo funciona correctamente.
Presione Ctrl+F5 para recompilar e iniciar la aplicación.
Escriba
5 + 5y presione5 + 5Compruebe que el resultado es 10.
Depurar la aplicación
Como el usuario tiene libertad para escribir lo que quiera en la ventana de la consola, nos aseguraremos de que la calculadora controla las entradas según lo previsto. En lugar de ejecutar el programa, se va a depurar, para poder inspeccionar con detalle lo que hace, paso a paso.
Para ejecutar la aplicación en el depurador
Establezca un punto de interrupción en la línea
result = c.Calculate(x, oper, y);, justo después de que se haya solicitado la entrada al usuario. Para ello, haga clic en la línea en la barra vertical de color gris del borde izquierdo de la ventana del editor. Aparece un punto rojo.
Ahora, cuando se depure el programa, la ejecución siempre se detendrá en esa línea. Ya tenemos una idea aproximada de que el programa funciona para casos sencillos. Ya que no queremos pausar la ejecución cada vez, vamos a hacer condicional un punto de interrupción.
Haga clic con el botón derecho en el punto de color rojo que representa el punto de interrupción y seleccione Condiciones. En el cuadro de edición para la condición, escriba
(y == 0) && (oper == '/'). Elija el botón Cerrar cuando haya terminado. La condición se guarda automáticamente.
que muestra al usuario que abre la sección Punto de interrupción Configuración y establece un punto de interrupción condicional. Ahora, la ejecución se detiene en el punto de interrupción solo si se intenta realizar una división por 0.
Para depurar el programa, presione F5 o haga clic en el botón de la barra de herramientas Depurador local de Windows con el icono de flecha de color verde. En la aplicación de consola, si escribe algo parecido a "5 - 0", el programa se comporta con normalidad y se sigue ejecutando. Pero si escribe "10 / 0", se detiene en el punto de interrupción. Incluso puede agregar cualquier número de espacios entre el operador y los números;
cines lo suficientemente inteligente como para analizar la entrada de forma adecuada.
Vídeo corto de Visual Studios en el
Ventanas útiles del depurador
Cada vez que se depura el código, es posible que observe que aparecen ventanas nuevas. Estas ventanas pueden ayudar a la experiencia de depuración. Fíjese en la ventana Automático. En la ventana Automático se muestran los valores actuales de las variables que se han usado al menos tres líneas antes y hasta la línea actual.

Para ver todas las variables de esa función, cambie a la ventana Variables locales. En realidad puede modificar los valores de estas variables durante la depuración, para ver qué efecto tienen en el programa. En este caso, se dejarán como están.

También puede mantener el puntero sobre las variables en el propio código para ver sus valores actuales en donde se detiene la ejecución. Para asegurarse de que la ventana del editor tiene el foco, haga clic en ella primero.

Para continuar la depuración
En la línea de color amarillo de la izquierda se muestra el punto de ejecución actual. La línea actual llama
Calculatea , por lo que presioneCalculatepara ir paso a paso por instrucciones en la función . Se encontrará en el cuerpo de la funciónCalculate. Tenga cuidado con Depurar paso a paso por instrucciones; si lo ejecuta demasiado, puede perder mucho tiempo. Pasa por cualquier código que se utilice en la línea en la que se encuentre, incluidas las funciones de biblioteca estándar.Ahora que el punto de ejecución está al principio de la función, presione
CalculateCalculatepara ir a la siguiente línea de la ejecución del programa. F10 también se conoce como Depurar paso a paso por procedimientos. Se puede usar Depurar paso a paso por procedimientos para pasar de una línea a otra, sin profundizar en los detalles de lo que ocurre en cada elemento de la línea. En general, debe usar Paso a paso por instrucciones en lugar de Paso a paso por instrucciones ,a menos que desee profundizar más en el código al que se llama desde otro lugar (como hizo para llegar al cuerpo de ).Siga usando F10 para pasar por alto cada línea hasta que vuelva a la función en el otro archivo y se detenga en la línea.

Parece que el programa hace lo que se espera: toma el primer número y lo divide por el segundo. En la
coutlínea, mantenga el puntero sobreresultla variable o mire en laresultcoutAutomático. Verá que su valor se muestra como "inf", que no se ve bien, así que vamos a arreglarlo. La línea simplemente genera el valor almacenado en , por lo que cuando se avanza una línea más mediantecoutresultcoutse muestra la ventana de consola:
Este resultado sucede porque la división por cero no está definida, por lo que el programa no tiene una respuesta numérica a la operación solicitada.
Para corregir el error de "división por cero"
Vamos a controlar la división por cero de forma más elegante, para que un usuario pueda entender el problema.
Realice los cambios siguientes en CalculatorTutorial.cpp. (Puede dejar el programa en ejecución mientras realiza los cambios, gracias a una característica del depurador denominada Editar y continuar):
// CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there. // #include "pch.h" #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; }Ahora presione F5 una vez. La ejecución del programa continúa hasta que tiene que detenerse para solicitar la entrada del usuario. Vuelva a escribir
10 / 0. Ahora, se imprime un mensaje más útil. Al usuario se le solicita una entrada adicional y el programa se continúa ejecutando con normalidad.
Nota
Cuando se edita código en modo de depuración, hay riesgo de que se vuelva obsoleto. Esto sucede cuando el depurador sigue ejecutando el código antiguo y todavía no se ha actualizado con los cambios. El depurador abre un cuadro de diálogo en el que se le informará cuando esto ocurra. En ocasiones, es posible que deba presionar F5 para actualizar el código que se está ejecutando. En concreto, si realiza un cambio dentro de una función mientras el punto de ejecución está dentro de ella, tendrá que depurarla paso a paso por procedimientos y después volver a acceder a la función para obtener el código actualizado. Si por algún motivo eso no funciona y ve un mensaje de error, puede detener la depuración si hace clic en el cuadrado de color rojo de la barra de herramientas situada bajo los menús de la parte superior del IDE y después presionar F5 o hacer clic en la flecha "Reproducir" de color verde situada junto al botón de detención en la barra de herramientas para volver a iniciar la depuración.
Descripción de los métodos abreviados de Ejecutar y Depurar
- F5 (o Depurar iniciar depuración) inicia una sesión de depuración si aún no está activa y ejecuta el programa hasta que se encuentra un punto de interrupción o el programa necesita la entrada del usuario. Si no se necesita la entrada del usuario y no hay ningún punto de interrupción disponible, el programa finaliza y la ventana de la consola se cierra de forma automática cuando el programa termina de ejecutarse. Si tiene algo parecido a un programa "Hola mundo" para ejecutar, presione Ctrl+F5 o establezca un punto de interrupción antes de presionar F5 para mantener abierta la ventana.
- Ctrl+F5 (o Depurariniciar sin depurar)ejecuta la aplicación sin entrar en modo de depuración. Esto es ligeramente más rápido que la depuración y la ventana de la consola permanece abierta después de que el programa termine de ejecutarse.
- F10 (conocido como Depurar paso a paso por procedimientos) permite iterar por el código línea a línea y visualizar cómo se ejecuta y cuáles son los valores de variable en cada paso de la ejecución.
- F11 (conocido como Depurar paso a paso por instrucciones) funciona de forma similar a Depurar paso a paso por procedimientos, con la excepción de que depura paso a paso por procedimientos las funciones a las que se llama en la línea de ejecución. Por ejemplo, si la línea que se está ejecutando llama a una función, al presionar F11 el puntero se desplaza al cuerpo de la función, para que pueda seguir la ejecución del código de la función antes de volver a la línea de partida. Al presionar F10 la llamada de función se depura paso a paso por instrucciones y simplemente pasa a la línea siguiente; la llamada de función se sigue produciendo, pero el programa no se detiene para mostrarle lo que está haciendo.
Cierre la aplicación
- Si sigue en ejecución, cierre la ventana de la consola de la aplicación de calculadora.
¡Enhorabuena! Ha completado el código de la aplicación de calculadora y lo ha compilado y depurado en Visual Studio.