Sejam muito bem-vindos a Alura, o meu nome é Vinicius Dias e eu vou guiar vocês nesse treinamento de “C++”.
Nós vamos avançar um pouco do conhecimento que nós já temos, aprender coisas novas e claro, praticar tudo o que vamos falar.
Nós vamos começar o nosso projeto, com o projeto final do treinamento anterior, aquele jogo de forca, só que aquele jogo está todo em um arquivo só.
Então nós vamos aprender neste treinamento como separar em diversos arquivos, então reparemos que nós temos na tela um arquivo bem pequeno.
E com isso, nós vamos entender o real propósito de arquivos de cabeçalho, nós vamos entender como funciona o processo de compilação e como ele é separado em compilação e link.
Então nós vamos entender como o código executável realmente é gerado e nisso, vai surgir a necessidade de uma ferramenta mais profissional.
Então nós vamos utilizar IDE no nosso treinamento, para quem está no Windows, o Visual Studio, para quem está no MAC, o Xcode e eu que estou no Linux, estou utilizando o CodeLite, mas qualquer IDE que você já esteja acostumado, também pode funcionar.
E com isso, nós vamos aprender coisas mais interessantes do C++, como referências constantes, variáveis estáticas, unidades de tradução, translation unit, namespace e resolução de namespace.
Nós vamos falar sobre gerenciamento de memória, o que é stack? O que é heap? Como alocar um dado na heap e por que isso é tão custoso?
Enfim, nós vamos bater bastante papo, praticar bastante também e caso você fique com alguma dúvida nesse meio tempo, não precisa hesitar, abre uma dúvida no fórum.
Eu tento responder sempre pessoalmente sempre que possível, mas quando eu não consigo, nós temos uma vasta comunidade de alunos moderadores e instrutores sempre dispostos a ajudar.
Já falei bastante, então vamos comigo no próximo vídeo para revisarmos o que já temos e começar a implementar melhorias.
Bem-vindos de volta. Então antes de adicionarmos novas funcionalidades, usar novos recursos da linguagem, melhor dizendo, vamos passar o olho bem rápido no projetor que nós finalizamos, que foi o que vocês finalizaram no último treinamento de C++.
Então dá uma olhada na tela, vamos para a nossa função main, lembrando que por enquanto, eu continuo usando o Visual Studio Code, como vocês utilizaram no último treinamento.
O que essa função main faz? Ela imprime um cabeçalho, aquela mensagem de jogo da forca, lê um arquivo, sorteia uma palavra secreta e verifica.
Enquanto a pessoa não tiver acertado e não tiver enforcado, ela imprime os erros, ou seja, mostra quantos chutes errados a pessoas já deu, imprime a palavra com os seus acertos no local certo e pede para que a pessoa chute, solicita um chute da pessoa.
E no final, quando a pessoa tiver ou acertado ou enforcado, então vai exibir “Fim de jogo”, mostrar qual era a palavra secreta e caso a pessoa não tenha acertado, nós mostramos que ela perdeu.
Agora, caso contrário, mostra uma mensagem de parabéns e além disso, nós estamos dando a possibilidade de a pessoa adicionar uma nova palavra.
Então isso é o nosso sistema, inclusive, nós podemos, como tem feito no último treinamento, deixa eu dar um zoom na tela, o que nós podemos fazer?
g++ forca.cpp
e isso vai gerar um novo arquivo, um arquivo “a.out”. Óbvio que nós podemos definir com o parâmetro “O”, o nome do arquivo que queremos gerar. Então, por exemplo: forca.out
.
Quando executamos, temos o nosso jogo. Então o programa vai buscar dessa lista de palavras. Eu tenho seis frutas, então dessa lista de palavras, ele vai selecionar uma e tentaremos acertar.
Nesse caso, eu sei que é uva, então fim de jogo. Nós acertamos. Não vou adicionar nenhuma palavra, mas tem o nosso sistema funcionando.
Entendido isso, qual é a intenção agora? A primeira coisa que nós vamos fazer, nós temos um arquivo com mais de 170 linhas, com todas as funcionalidades.
Então o que eu quero fazer é separar esse arquivo, esse projeto em arquivos separados porque, o que acontece?
Isso é muito importante para você, a minha intenção nesse treinamento não é te ensinar a fazer um jogo de forca, a minha intenção é te ensinar a programar em C++, de forma mais profissional.
E num projeto real, nós não vamos ter tudo, todo o nosso programa em um arquivo só, concorda? Não faz sentido, então o que precisamos fazer? Num projeto real, funcionalidades são separadas em arquivos diferentes.
Então nós vamos começar a fazer isso, como podemos fazer isso? Existem várias formas de organizarmos o nosso projeto, eu vou organizar da seguinte forma: cada uma das funções vai estar em um arquivo específico para ela.
Você, se quiser, pode fazer de forma diferente, por exemplo, a função não enforcou e não acertou, podem estar no meio de um arquivo.
As funções que lidam com a palavra, pode estar no mesmo arquivo, mas eu vou separar cada uma das funções em um arquivo diferente.
Então, deixa eu fazer com umas duas funções, só para você entender como nós vamos fazer. Então, por exemplo, essa letra_existe
, eu vou criar um arquivo `letra_existe.cpp.
Então dentro do letra_existe
, eu vou adicionar essa função, então deixa eu copiar a função e trazer para cá; e trazer para então deixa eu copiar a função o e trazer para cá.
Tenho a minha função letra_existe
, só que para essa função compilar, para que este arquivo funcione, nós precisamos da variavel_secreta
. Então eu vou copiar para lá também.
Eu vou ter a definição da palavra secreta também neste arquivo. A princípio nós temos tudo o que precisamos.
Mas lembra, esse tipo String, ele está dentro de um outro arquivo, de uma outra biblioteca, então: #include <string>
e outro detalhe é que ele faz parte de um name space que nós vamos falar mais sobre isso, mas ele está dentro de std
.
Com isso, nós já temos o primeiro arquivo de função extraído, eu vou fazer só mais um e vou voltar no próximo vídeo para fazermos o restante.
O letra_existe
já foi, posso remover, o próximo vai ser esse nao_acertou
. Então vamos criar o nao_acertou.cpp
e nesse arquivo nós vamos adicionar a função nao_acertou
e vamos ver o que ele vai precisar de variável.
Vai precisar também só da palavra_secreta
e da variável chutou
. Então copiar as duas funções e de novo nós vamos precisar de algumas coisas.
Importei esses dois: palavra_secreta
e o nao_acertou
, vou chamar o arquivo string e vou também incluir o arquivo de mapa. Ambos estão em std
.
Então já tenho duas funções extraídas para arquivos específicos e como nós vamos fazer para a main
conhecer essas funções? Porque repara, agora está falhando.
Então nós vamos, da mesma forma como inclui várias bibliotecas do sistema, nós vamos incluir o nosso próprio arquivo, então vai ser, por exemplo: nao_acertou.cpp
e o letra_existe.cppp
.
Nós começamos a organizar o nosso projeto e entendemos o projeto em si, o que é, então no próximo vídeo, eu volto para finalizarmos e extrair todas as funções que nós temos nesse arquivo.
Bem-vindos de volta. Então vamos continuar extraindo nossas funções, vamos para a função nao_enforcou.cpp
e nós vamos trazer ela para nao_enforcou
e vamos ver de qual variável nós vamos precisar.
Nós vamos precisar de chutes_errados
, que vai ser um vetor, um vector, então nós vamos precisar incluir a biblioteca vector #include <vector>
e dentro de std
, imprime_cabecalho
, essa vai ser simples, não precisa de nenhuma variável, tirar da forca.cpp
, imprime_cabecalho.cpp
.
Vai precisar do iostream
porque ela está chamando a função std::cout
, então vamos adicionar o std
no imprime_cabecalho
e no final desse treinamento, eu vou te explicar o motivo de eu nao estar fazendo aquele ios namespace std
, por enquanto, só confia, nós vamos utilizar o std
dessa forma.
Imprimos, vai precisar a variável chutes_errados
, então já deixa eu copiar ela daqui e chamar o imprime_erros.cpp
. Preciso incluir? Obviamente, #include <vector> e
#include porque nós vamos precisar, aqui no
std::coute
std:end`.
No vetor também preciso do std
, posso remover essa função, faltam algumas funções. Caso você queira, já tenha entendido o processo, pode pausar esse vídeo e voltar no próximo já com todas as funções extraídas, mas eu vou continuar: imprime_palavra.cpp
.
Ele vai precisar do iostream
, #include <iostream>
, vai utilizar o std:
, ele vai usar a palavra_secreta
e chutou
, então nós precisamos de duas variáveis. Dei “Enter” e chutou
, que é o map e vamos incluir essas duas bibliotecas.
Incluir o tipo string e incluir o tipo map, que fazem parte de std:
, sem segredo. imprime_palavra
foi, vamos continuar, chuta. Essa função vai dar um pouco mais de trabalho, mas sem problemas: chuta.cpp
.
Então, repara que esse início está sendo bem trabalhoso porque nós começamos o projeto todo em um arquivo só, o ideal é que já comecemos de forma profissional, mas vamos nessa: #include <iostream>
.
Vamos precisar do std:
e vamos precisar de duas coisas a mais, a variável chutou
, vamos ver se é só essa variável mesmo que eu vou precisar.
E além disso, eu vou precisar incluir a função letra_existe
, #inclusive “letra_existe.cpp”. Abaixo é um
std::e nós precisamos também do
chutes_errados`, que vai ser um vector.
Então vamos incluir um vector: std::”
e faltou incluir o mapa. Então, a princípio o vetor chutes_errados
está pronto também. Vamos para ler_arquivo
, depois sorteia a palavra, salva arquivo, adiciona palavra.
Então vou encerrar o vídeo por aqui porque você já entendeu a ideia e no próximo vídeo, todas essas funções vão estar nos seus próprios arquivos.
Repara que eu ainda tenho um problema de compilação e no próximo vídeo, vamos corrigir isso.
O curso Avançando com C++: entenda melhor a linguagem possui 163 minutos de vídeos, em um total de 56 atividades. Gostou? Conheça nossos outros cursos de C e C++ em Programação, ou leia nossos artigos de Programação.
Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:
Impulsione a sua carreira com os melhores cursos e faça parte da maior comunidade tech.
1 ano de Alura
Assine o PLUS e garanta:
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Acelere o seu aprendizado com a IA da Alura e prepare-se para o mercado internacional.
1 ano de Alura
Todos os benefícios do PLUS e mais vantagens exclusivas:
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Transforme a sua jornada com benefícios exclusivos e evolua ainda mais na sua carreira.
1 ano de Alura
Todos os benefícios do PRO e mais vantagens exclusivas:
Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.