Primeiras aulas do curso Avançando com C++: entenda melhor a linguagem

Avançando com C++: entenda melhor a linguagem

Organizando o projeto - Apresentação

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.

Organizando o projeto - Revisão do projeto

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.

Organizando o projeto - Arquivos separados

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 nostd::coutestd: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 é umstd::e nós precisamos também dochutes_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.

Sobre o curso Avançando com C++: entenda melhor a linguagem

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 Linguagem 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:

Aprenda Linguagem C e C++ acessando integralmente esse e outros cursos, comece hoje!

Plus

  • Acesso a TODOS os cursos da plataforma

    Mais de 1200 cursos completamente atualizados, com novos lançamentos todas as semanas, em Programação, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.

  • Alura Challenges

    Desafios temáticos para você turbinar seu portfólio. Você aprende na prática, com exercícios e projetos que simulam o dia a dia profissional.

  • Alura Cases

    Webséries exclusivas com discussões avançadas sobre arquitetura de sistemas com profissionais de grandes corporações e startups.

  • Certificado

    Emitimos certificados para atestar que você finalizou nossos cursos e formações.

  • Alura Língua (incluindo curso Inglês para Devs)

    Estude a língua inglesa com um curso 100% focado em tecnologia e expanda seus horizontes profissionais.

12X
R$85
à vista R$1.020
Matricule-se

Pro

  • Acesso a TODOS os cursos da plataforma

    Mais de 1200 cursos completamente atualizados, com novos lançamentos todas as semanas, em Programação, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.

  • Alura Challenges

    Desafios temáticos para você turbinar seu portfólio. Você aprende na prática, com exercícios e projetos que simulam o dia a dia profissional.

  • Alura Cases

    Webséries exclusivas com discussões avançadas sobre arquitetura de sistemas com profissionais de grandes corporações e startups.

  • Certificado

    Emitimos certificados para atestar que você finalizou nossos cursos e formações.

  • Alura Língua (incluindo curso Inglês para Devs)

    Estude a língua inglesa com um curso 100% focado em tecnologia e expanda seus horizontes profissionais.

12X
R$120
à vista R$1.440
Matricule-se
Conheça os Planos para Empresas

Acesso completo
durante 1 ano

Estude 24h/dia
onde e quando quiser

Novos cursos
todas as semanas