Criar um projeto de aplicativo de console C ++
18/08/2019
37 minutos para ler
O ponto de partida usual para um programador de C ++ é um "Olá, mundo!" aplicativo que é executado na linha de comando. É isso que você criará no Visual Studio neste artigo e, em seguida, passaremos para algo mais desafiador: um aplicativo de calculadora.
Pré-requisitos
Tenha o Visual Studio com o desenvolvimento da área de trabalho com carga de trabalho C ++ instalado e em execução no seu computador. Se ainda não estiver instalado, consulte Instalar o suporte ao C ++ no Visual Studio .
Crie seu projeto de aplicativo
O Visual Studio usa projetos para organizar o código de um aplicativo e soluções para organizar seus projetos. Um projeto contém todas as opções, configurações e regras usadas para criar seus aplicativos. Ele também gerencia o relacionamento entre todos os arquivos do projeto e quaisquer arquivos externos. Para criar seu aplicativo, primeiro, você criará um novo projeto e solução.
Se você acabou de iniciar o Visual Studio, verá a caixa de diálogo Visual Studio 2019. Escolha Criar um novo projeto para começar.
Caso contrário, na barra de menus do Visual Studio, escolha Arquivo > Novo > Projeto . A janela Criar um novo projeto é aberta.
Na lista de modelos de projeto, escolha Console App e , em seguida, escolha Avançar .
Importante
Escolha a versão C ++ do modelo do aplicativo de console . Possui as tags C ++ , Windows e Console , e o ícone tem "++" no canto.
Na caixa de diálogo Configurar seu novo projeto , selecione a caixa de edição Nome do projeto , nomeie seu novo projeto como CalculatorTutorial e escolha Criar .
Um aplicativo de console do Windows C ++ vazio é criado. Os aplicativos de console usam uma janela do console do Windows para exibir a saída e aceitar a entrada do usuário. No Visual Studio, uma janela do editor é aberta e mostra o código gerado:
C ++
cópia de
// 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
Verifique se o seu novo aplicativo cria e executa
O modelo para um novo aplicativo de console do Windows cria um aplicativo simples "Hello World" em C ++. Neste ponto, você pode ver como o Visual Studio cria e executa os aplicativos criados diretamente no IDE.
Para criar seu projeto, escolha Build Solution no menu Build . A janela Saída mostra os resultados do processo de construção.
Para executar o código, na barra de menus, escolha Depurar , Iniciar sem depuração .
Uma janela do console é aberta e, em seguida, o aplicativo é executado. Quando você inicia um aplicativo de console no Visual Studio, ele executa seu código e imprime "Pressione qualquer tecla para fechar esta janela..." para lhe dar uma chance de ver a saída. Parabéns! Você criou seu primeiro "Olá, mundo!" aplicativo de console no Visual Studio!
Pressione uma tecla para fechar a janela do console e retornar ao Visual Studio.
Agora você tem as ferramentas para criar e executar seu aplicativo após cada alteração, para verificar se o código ainda funciona conforme o esperado. Mais tarde, mostraremos como depurá-lo, caso contrário.
Edite o código
Agora vamos transformar o código neste modelo em um aplicativo de calculadora.
No arquivo CalculatorTutorial.cpp , edite o código para corresponder a este exemplo:
C ++
cópia de
// CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there.
//
#include <iostream>
using namespace std;
int main()
{
cout << "Calculator Console Application" << endl << endl;
cout << "Please enter the operation to perform. Format: a+b | a-b | a*b | a/b"
<< endl;
return 0;
}
// Run program: Ctrl + F5 or Debug > Start Without Debugging menu
// Debug program: F5 or Debug > Start Debugging menu
// Tips for Getting Started:
// 1. Use the Solution Explorer window to add/manage files
// 2. Use the Team Explorer window to connect to source control
// 3. Use the Output window to see build output and other messages
// 4. Use the Error List window to view errors
// 5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project
// 6. In the future, to open this project again, go to File > Open > Project and select the .sln file
Compreendendo o código:
As #includeinstruções permitem que você faça referência ao código localizado em outros arquivos. Às vezes, você pode ver um nome de arquivo entre colchetes angulares ( <> ); outras vezes, é cercado por aspas ( "" ). Em geral, colchetes angulares são usados ao fazer referência à Biblioteca Padrão C ++, enquanto aspas são usadas para outros arquivos.
A using namespace std;linha instrui o compilador a esperar que coisas da Biblioteca Padrão C ++ sejam usadas neste arquivo. Sem essa linha, cada palavra-chave da biblioteca teria que ser precedida de a std::, para indicar seu escopo. Por exemplo, sem essa linha, cada referência a coutteria que ser escrita como std::cout. A usinginstrução é adicionada para tornar o código mais limpo.
A coutpalavra-chave é usada para imprimir na saída padrão em C ++. O operador << diz ao compilador para enviar o que estiver à direita dele para a saída padrão.
A palavra-chave endl é como a tecla Enter; termina a linha e move o cursor para a próxima linha. É uma prática recomendada colocar um \ndentro da string (contida por "") para fazer a mesma coisa, como endlsempre libera o buffer e pode prejudicar o desempenho do programa, mas como esse é um aplicativo muito pequeno, endlé usado para melhor legibilidade.
Todas as instruções C ++ devem terminar com ponto-e-vírgula e todos os aplicativos C ++ devem conter uma main()função. Esta função é o que o programa executa no início. Todo o código deve estar acessível main()para ser usado.
Para salvar o arquivo, digite Ctrl + S ou escolha o ícone Salvar próximo à parte superior do IDE, o ícone de disquete na barra de ferramentas abaixo da barra de menus.
Para executar o aplicativo, pressione Ctrl + F5 ou vá para o menu Debug e escolha Start Without Debugging . Você deverá ver uma janela do console que exibe o texto especificado no código.
Feche a janela do console quando terminar.
Adicione código para fazer algumas contas
É hora de adicionar um pouco de lógica matemática.
Para adicionar uma classe da Calculadora
Vá para o menu Project e escolha Add Class . Na caixa de edição Nome da classe , digite Calculadora . Escolha OK . Dois novos arquivos são adicionados ao seu projeto. Para salvar todos os seus arquivos alterados de uma só vez, pressione Ctrl + Shift + S . É um atalho de teclado para Arquivo > Salvar tudo . Há também um botão na barra de ferramentas para Salvar tudo , um ícone de dois disquetes, localizado ao lado do botão Salvar . Em geral, é uma boa prática fazer o Save All com frequência, para que você não perca nenhum arquivo ao salvar.
Uma classe é como um modelo para um objeto que faz alguma coisa. Nesse caso, definimos uma calculadora e como ela deve funcionar. O assistente Adicionar Classe que você usou acima criou os arquivos .he .cpp que têm o mesmo nome que a classe. Você pode ver uma lista completa dos arquivos do seu projeto na janela Solution Explorer , visível ao lado do IDE. Se a janela não estiver visível, você pode abri-la na barra de menus: escolha Exibir > Gerenciador de Soluções .
Agora você deve ter três abas abertas no editor: CalculatorTutorial.cpp , Calculator.h e Calculator.cpp . Se você fechar acidentalmente um deles, poderá reabri-lo clicando duas vezes na janela Gerenciador de Soluções .
Em Calculator.h , remova as linhas Calculator();e ~Calculator();que foram geradas, pois você não precisará delas aqui. Em seguida, adicione a seguinte linha de código para que o arquivo fique assim:
C ++
cópia de
#pragma once
class Calculator
{
public:
double Calculate(double x, char oper, double y);
};
Compreendendo o código
A linha que você adicionou declara uma nova função chamada Calculate, que usaremos para executar operações matemáticas para adição, subtração, multiplicação e divisão.
O código C ++ é organizado em arquivos de cabeçalho (.h) e arquivos de origem (.cpp). Várias outras extensões de arquivo são suportadas por vários compiladores, mas estas são as principais a serem conhecidas. Funções e variáveis são normalmente declaradas , ou seja, recebem um nome e um tipo, nos arquivos de cabeçalho, e implementadas , ou são definidas, nos arquivos de origem. Para acessar o código definido em outro arquivo, você pode usar #include "filename.h", onde 'filename.h' é o nome do arquivo que declara as variáveis ou funções que você deseja usar.
As duas linhas que você excluiu declararam um construtor e destruidor para a classe. Para uma classe simples como esta, o compilador as cria para você e seus usos estão além do escopo deste tutorial.
É uma boa prática organizar seu código em arquivos diferentes com base no que ele faz, por isso é fácil encontrar o código necessário mais tarde. No nosso caso, definimos a Calculatorclasse separadamente do arquivo que contém a main()função, mas planejamos fazer referência à Calculatorclasse main().
Você verá um rabisco verde aparecer abaixo Calculate. É porque não definimos a Calculatefunção no arquivo .cpp. Passe o mouse sobre a palavra, clique na lâmpada (neste caso, uma chave de fenda) que aparece e escolha Criar definição de 'Calcular' em Calculator.cpp .
Aparece um pop-up que mostra uma alteração de código feita no outro arquivo. O código foi adicionado ao Calculator.cpp .
Atualmente, apenas retorna 0.0. Vamos mudar isso. Pressione Esc para fechar o pop-up.
Alterne para o arquivo Calculator.cpp na janela do editor. Remova as seções Calculator()e ~Calculator()(como você fez no arquivo .h) e adicione o seguinte código a Calculate():
C ++
cópia de
#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;
}
}
Compreendendo o código
A função Calculateconsome um número, um operador e um segundo número e, em seguida, executa a operação solicitada nos números.
A instrução switch verifica qual operador foi fornecido e apenas executa o caso correspondente a essa operação. O padrão: case é um fallback, caso o usuário digite um operador que não seja aceito, para que o programa não seja interrompido. Em geral, é melhor lidar com entradas inválidas do usuário de uma maneira mais elegante, mas isso está além do escopo deste tutorial.
A doublepalavra-chave indica um tipo de número que suporta decimais. Dessa forma, a calculadora pode lidar com matemática decimal e matemática inteira. A Calculatefunção é necessária a retornar sempre um tal número, devido ao doublemuito no começo do código (isto denota tipo de retorno da função), razão pela qual voltamos 0.0, mesmo no caso padrão.
O arquivo .h declara o protótipo da função , que informa ao compilador antecipadamente quais parâmetros ele requer e que tipo de retorno esperar dele. O arquivo .cpp possui todos os detalhes de implementação da função.
Se você criar e executar o código novamente neste momento, ele ainda será encerrado após perguntar qual operação executar. Em seguida, você modificará a mainfunção para fazer alguns cálculos.
Para chamar as funções de membro da classe Calculadora
Agora vamos atualizar a mainfunção em CalculatorTutorial.cpp :
C ++
cópia de
// 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;
}
Compreendendo o código
Como os programas C ++ sempre iniciam na main()função, precisamos chamar nosso outro código a partir daí, portanto #include, é necessária uma instrução.
Algumas variáveis iniciais x, y, oper, e resultsão declarados para armazenar o primeiro número, segundo número, operador, e o resultado final, respectivamente. É sempre uma boa prática fornecer a eles alguns valores iniciais para evitar comportamentos indefinidos, o que é feito aqui.
A Calculator c;linha declara um objeto chamado 'c' como uma instância da Calculatorclasse. A classe em si é apenas um esquema de como as calculadoras funcionam; o objeto é a calculadora específica que faz as contas.
A while (true)declaração é um loop. O código dentro do loop continua a ser executado repetidamente, desde que a condição dentro do ()seja verdadeira. Como a condição é simplesmente listada como true, é sempre verdade, portanto o loop é executado para sempre. Para fechar o programa, o usuário deve fechar manualmente a janela do console. Caso contrário, o programa sempre espera por novas entradas.
A cinpalavra-chave é usada para aceitar a entrada do usuário. Esse fluxo de entrada é inteligente o suficiente para processar uma linha de texto inserida na janela do console e colocá-la dentro de cada uma das variáveis listadas, em ordem, assumindo que a entrada do usuário corresponda à especificação necessária. Você pode modificar esta linha para aceitar diferentes tipos de entrada, por exemplo, mais de dois números, embora a Calculate()função também precise ser atualizada para lidar com isso.
A c.Calculate(x, oper, y);expressão chama a Calculatefunção definida anteriormente e fornece os valores de entrada inseridos. A função então retorna um número que é armazenado result.
Por fim, resulté impresso no console, para que o usuário veja o resultado do cálculo.
Crie e teste o código novamente
Agora é hora de testar o programa novamente para garantir que tudo funcione corretamente.
Pressione Ctrl + F5 para reconstruir e iniciar o aplicativo.
Digite 5 + 5e pressione Enter . Verifique se o resultado é 10.
Depurar o aplicativo
Como o usuário pode digitar qualquer coisa na janela do console, verifique se a calculadora manipula algumas entradas conforme o esperado. Em vez de executar o programa, vamos depurá-lo para que possamos inspecionar o que está fazendo em detalhes, passo a passo.
Para executar o aplicativo no depurador
Defina um ponto de interrupção na result = c.Calculate(x, oper, y);linha, logo após a solicitação do usuário. Para definir o ponto de interrupção, clique ao lado da linha na barra vertical cinza ao longo da borda esquerda da janela do editor. Um ponto vermelho aparece.
Agora, quando depuramos o programa, ele sempre pausa a execução nessa linha. Já temos uma ideia aproximada de que o programa funciona para casos simples. Como não queremos interromper a execução todas as vezes, vamos condicionar o ponto de interrupção.
Clique com o botão direito do mouse no ponto vermelho que representa o ponto de interrupção e escolha Condições . Na caixa de edição da condição, insira (y == 0) && (oper == '/'). Escolha o botão Fechar quando terminar. A condição é salva automaticamente.
Agora, pausamos a execução no ponto de interrupção especificamente se uma divisão por 0 for tentada.
Para depurar o programa, pressione F5 ou escolha o botão da barra de ferramentas Local Windows Debugger que possui o ícone de seta verde. No aplicativo do console, se você digitar algo como "5 - 0", o programa se comportará normalmente e continuará sendo executado. No entanto, se você digitar "10/0", ele será pausado no ponto de interrupção. Você pode até colocar qualquer número de espaços entre o operador e os números: ciné inteligente o suficiente para analisar a entrada adequadamente.
Janelas úteis no depurador
Sempre que você depurar seu código, você pode perceber que algumas novas janelas aparecem. Essas janelas podem ajudar na sua experiência de depuração. Dê uma olhada na janela Autos . A janela Autos mostra os valores atuais das variáveis usadas pelo menos três linhas antes e até a linha atual. Para ver todas as variáveis dessa função, alterne para a janela Locais . Na verdade, você pode modificar os valores dessas variáveis durante a depuração, para ver qual efeito elas teriam no programa. Nesse caso, vamos deixá-los sozinhos.
Você também pode passar o mouse sobre as variáveis no próprio código para ver seus valores atuais onde a execução está pausada no momento. Verifique se a janela do editor está em foco clicando nela primeiro.
Para continuar a depuração
A linha amarela à esquerda mostra o ponto atual de execução. A linha atual chama Calculate, então pressione F11 para entrar na função. Você se encontrará no corpo da Calculatefunção. Tenha cuidado com o Step Into ; se você fizer demais, poderá perder muito tempo. Ele entra em qualquer código usado na linha em que você está, incluindo funções de biblioteca padrão.
Agora que o ponto de execução está no início da Calculatefunção, pressione F10 para passar para a próxima linha na execução do programa. F10 também é conhecido como Step Over . Você pode usar a opção Passar para passar de uma linha para outra, sem se aprofundar nos detalhes do que está ocorrendo em cada parte da linha. Em geral, você deve usar Step Over em vez de Step Into , a menos que queira mergulhar mais profundamente no código que está sendo chamado de outro lugar (como você fez para alcançar o corpo de Calculate).
Continue usando F10 para Passar por cada linha até voltar à main()função no outro arquivo e parar na coutlinha.
Parece que o programa está fazendo o que é esperado: pega o primeiro número e o divide pelo segundo. Na coutlinha, passe o mouse sobre a resultvariável ou dar uma olhada resultno Autos janela. Você verá que o valor está listado como "inf", o que não parece certo, então vamos corrigi-lo. A coutlinha apenas gera o valor armazenado result, portanto, quando você avança mais uma linha usando F10 , a janela do console exibe:
Esse resultado ocorre porque a divisão por zero é indefinida, portanto o programa não possui uma resposta numérica para a operação solicitada.
Para corrigir o erro "dividir por zero"
Vamos lidar com a divisão por zero de maneira mais fácil, para que um usuário possa entender o problema.
Faça as seguintes alterações no CalculatorTutorial.cpp . (Você pode deixar o programa em execução enquanto edita, graças a um recurso de depurador chamado Edit and Continue ):
C ++
cópia de
// 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;
}
Agora pressione F5 uma vez. A execução do programa continua até que seja necessário fazer uma pausa para solicitar a entrada do usuário. Entre 10 / 0novamente. Agora, uma mensagem mais útil é impressa. O usuário é solicitado a fornecer mais informações e o programa continua executando normalmente.
Nota
Quando você edita o código no modo de depuração, existe o risco de o código ficar obsoleto. Isso acontece quando o depurador ainda está executando seu código antigo e ainda não o atualizou com suas alterações. O depurador abre uma caixa de diálogo para informar quando isso acontece. Às vezes, pode ser necessário pressionar F5 para atualizar o código que está sendo executado. Em particular, se você fizer uma alteração dentro de uma função enquanto o ponto de execução estiver dentro dessa função, será necessário sair da função e voltar a usá-la novamente para obter o código atualizado. Se isso não funcionar por algum motivo e você receber uma mensagem de erro, poderá parar a depuração clicando no quadrado vermelho na barra de ferramentas, nos menus na parte superior do IDE, e inicie a depuração novamente, digitando F5 ou escolhendo a seta verde "reproduzir" ao lado do botão Parar na barra de ferramentas.
Compreendendo os atalhos de execução e depuração
F5 (ou Debug > Start Debugging ) inicia uma sessão de depuração, se ainda não estiver ativa, e executa o programa até que um ponto de interrupção seja atingido ou o programa precise de entrada do usuário. Se nenhuma entrada do usuário for necessária e nenhum ponto de interrupção estiver disponível, o programa será encerrado e a janela do console se fechará quando o programa terminar a execução. Se você tem algo como um programa "Hello World" para executar, use Ctrl + F5 ou defina um ponto de interrupção antes de inserir F5 para manter a janela aberta.
Ctrl + F5 (ou Depurar > Iniciar sem depuração ) executa o aplicativo sem entrar no modo de depuração. Isso é um pouco mais rápido que a depuração e a janela do console permanece aberta após o término da execução do programa.
O F10 (conhecido como Step Over ) permite que você repita o código, linha por linha, e visualize como o código é executado e quais valores de variáveis estão em cada etapa da execução.
O F11 (conhecido como Step Into ) funciona de maneira semelhante ao Step Over , exceto que ele entra em qualquer função chamada na linha de execução. Por exemplo, se a linha que está sendo executada chama uma função, pressionar F11 move o ponteiro para o corpo da função, para que você possa acompanhar o código da função que está sendo executada antes de retornar à linha em que você iniciou. Pressionar F10 passa pela chamada de função e apenas passa para a próxima linha; a chamada da função ainda acontece, mas o programa não pausa para mostrar o que está fazendo.
Feche o aplicativo
Se ainda estiver em execução, feche a janela do console para o aplicativo da calculadora.
O aplicativo finalizado
Parabéns! Você concluiu o código do aplicativo da calculadora e o criou e depurou no Visual Studio.
Próximos passos
Saiba mais sobre o Visual Studio for C ++
Sem comentários:
Enviar um comentário