Voltar aos Cursos
AI037 Undergraduate

C++ Primer, Quinta Edição

Um guia abrangente e autoritativo sobre C++, completamente reescrito para o padrão C++11. Este curso cobre tudo, desde os elementos básicos da linguagem até facilidades avançadas da biblioteca e ferramentas avançadas para criação de classes.

5.0
57.0h
601 estudantes
0 curtidas
Inteligência Artificial
Começar a Aprender

Visão Geral do Curso

📚 Resumo do Conteúdo

Um guia abrangente e autoritativo sobre C++, completamente reescrito para o padrão C++11. Este curso cobre tudo, desde elementos básicos da linguagem até recursos avançados da biblioteca e ferramentas de criação de classes complexas.

O guia definitivo e padrão da indústria para dominar a programação moderna em C++11.

Autor: Stanley B. Lippman, Josée Lajoie, Barbara E. Moo

Agradecimentos: Dave Abrahams, Andy Koenig, Stephan T. Lavavej, Jason Merrill, John Spicer, Herb Sutter, Bjarne Stroustrup, Alex Stepanov e membros do comitê de padronização.

🎯 Objetivos de Aprendizagem

  1. Definir e implementar a função main e compreender sua interação com o sistema operacional.
  2. Executar compilação por linha de comando e gerenciar fluxos de entrada/saída básicos (cin, cout).
  3. Aplicar estruturas de controle de fluxo para resolver problemas lógicos iterativos, como contar ocorrências.
  4. Implementar estruturas lógicas para contar e processar ocorrências consecutivas de dados de entrada.
  5. Diferenciar os operadores de atribuição (=) e igualdade (==) dentro de instruções de controle.
  6. Utilizar objetos de classe (Sales_item), acessar funções membro via operador ponto e incluir arquivos de cabeçalho personalizados.
  7. Distinguir entre diferentes tipos primitivos e prever os resultados de conversões de tipo e estouro aritmético em tipos sem sinal.
  8. Implementar recursos do C++11, incluindo inicialização por lista, nullptr, constexpr e especificadores de dedução de tipo.
  9. Diferenciar declarações e definições de variáveis, aplicando regras de escopo para gerenciar visibilidade de identificadores.
  10. Distinguir entre referências e ponteiros, e utilizar void* para manipulação genérica de memória.

🔹 Aula 1: Introdução ao C++ e Entrada/Saída Básica

Visão Geral: Esta aula apresenta a estrutura fundamental de um programa C++, focando na função main, tipos de dados básicos e o processo de compilação. Cobertura essencial das operações de Entrada/Saída (I/O) usando a biblioteca iostream, implementação de lógica por meio de loops while e for, e encerramento com uma introdução aos conceitos orientados a objetos por meio da classe Sales_item.

Resultados de Aprendizagem:

  • Definir e implementar a função main e compreender sua interação com o sistema operacional.
  • Executar compilação por linha de comando e gerenciar fluxos de entrada/saída básicos (cin, cout).
  • Aplicar estruturas de controle de fluxo para resolver problemas lógicos iterativos, como contar ocorrências.

🔹 Aula 2: Fluxo de Controle e Conceitos Básicos de Classes

Visão Geral: Esta aula transita do fluxo de controle básico para o poder fundamental do C++: Classes. Os alunos dominarão a lógica necessária para processar fluxos de dados (contar ocorrências consecutivas) e aprenderão a usar a classe Sales_item para lidar com estruturas de dados complexas tão facilmente quanto tipos integrados. A unidade conclui com a implementação de um programa funcional de Livraria, integrando redirecionamento de arquivos e relatórios de erros.

Resultados de Aprendizagem:

  • Implementar estruturas lógicas para contar e processar ocorrências consecutivas de dados de entrada.
  • Diferenciar os operadores de atribuição (=) e igualdade (==) dentro de instruções de controle.
  • Utilizar objetos de classe (Sales_item), acessar funções membro via operador ponto e incluir arquivos de cabeçalho personalizados.

🔹 Aula 3: Tipos Primitivos e Variáveis

Visão Geral: Esta aula estabelece os blocos fundamentais da programação em C++, explorando tipos aritméticos, ciclos de vida de variáveis e modelo de memória. Os alunos dominarão os detalhes das conversões de tipo (particularmente tipos sem sinal), a sintaxe de inicialização por lista do C++11 e as distinções críticas entre ponteiros e referências. A aula conclui com sistemas de tipos avançados, incluindo qualificadores const, dedução de tipo (auto, decltype) e implementação de estruturas de dados personalizadas robustas usando guardas de pré-processador.

Resultados de Aprendizagem:

  • Diferenciar entre diferentes tipos primitivos e prever os resultados de conversões de tipo e estouro aritmético em tipos sem sinal.
  • Implementar recursos do C++11, incluindo inicialização por lista, nullptr, constexpr e especificadores de dedução de tipo.
  • Diferenciar entre declarações e definições de variáveis, aplicando regras de escopo para gerenciar visibilidade de identificadores.

🔹 Aula 4: Tipos Compostos e Qualificadores de Tipo Modernos

Visão Geral: Esta aula explora o sofisticado sistema de tipos do C++11, focando na forma como tipos compostos (ponteiros e referências) interagem com qualificadores de tipo como const e constexpr. Os alunos dominarão os detalhes da dedução de tipo usando auto e decltype, e aprenderão a encapsular dados em estruturas personalizadas protegidas por guardas de cabeçalho de pré-processador.

Resultados de Aprendizagem:

  • Diferenciar entre referências e ponteiros, e utilizar void* para manipulação genérica de memória.
  • Classificar e aplicar qualificações const de alto nível e baixo nível, bem como constexpr para constantes em tempo de compilação.
  • Implementar dedução de tipo do C++11 (auto e decltype) para escrever código flexível e sustentável.

🔹 Aula 5: Strings e Vetores da Biblioteca

Visão Geral: Esta aula cobre os tipos fundamentais da Biblioteca Padrão C++ — string e vector — que oferecem alternativas mais flexíveis e seguras em relação aos tipos embutidos. Os alunos aprenderão a gerenciar acesso a namespaces via declarações using, inicializar e manipular strings e contêineres de comprimento variável, e usar loops baseados em faixa e iteradores para processar coleções de dados de forma eficiente.

Resultados de Aprendizagem:

  • Simplificar o código usando declarações using em namespace, evitando armadilhas comuns em arquivos de cabeçalho.
  • Realizar inicializações robustas de strings e vetores, incluindo inicialização por lista do C++11.
  • Implementar processamento a nível de caractere e crescimento dinâmico de contêineres usando push_back, loops baseados em faixa e operações básicas de iteradores.

🔹 Aula 6: Iteradores e Matrizes Inseridas

Visão Geral: Esta aula aborda os mecanismos fundamentais para navegar e gerenciar sequências no C++11. Passa-se de ferramentas modernas de alto nível, como iteradores para string e vector, para matrizes inseridas de baixo nível, aritmética de ponteiros e strings de estilo C. Os alunos aprenderão a integrar códigos legados baseados em matrizes com contêineres da biblioteca padrão moderna e gerenciar estruturas multidimensionais complexas.

Resultados de Aprendizagem:

  • Usar iteradores e aritmética de iteradores para navegar e manipular contêineres string e vector.
  • Definir, inicializar e navegar matrizes inseridas usando aritmética de ponteiros e funções da biblioteca begin/end.
  • Implementar operações de string estilo C e integrar com segurança matrizes inseridas com tipos da biblioteca moderna.

🔹 Aula 7: Expressões, Operadores e Conversões

Visão Geral: Esta aula aborda os blocos fundamentais de expressões em C++, focando na forma como a linguagem avalia operações e gerencia tipos de dados. Os alunos dominarão a distinção entre valores lvalue e rvalue, as regras de precedência e associatividade de operadores, e os mecanismos de operações aritméticas, lógicas e bit a bit. Além disso, a aula oferece uma análise profunda da gestão de tipos do C++, incluindo conversões aritméticas implícitas e a aplicação segura de conversões explícitas nomeadas.

Resultados de Aprendizagem:

  • Diferenciar entre lvalues (identidade de objeto) e rvalues (valor de objeto) e entender seu papel nas expressões.
  • Prever a ordem de avaliação de expressões complexas usando precedência, associatividade e lógica de curto-circuito.
  • Realizar manipulação de dados de baixo nível usando operadores bit a bit e gerenciar segurança de tipo por meio de conversões implícitas e conversões explícitas nomeadas.

🔹 Aula 8: Estruturas Avançadas e Tratamento de Exceções

Visão Geral: Esta aula aborda as estruturas essenciais de fluxo de controle do C++, desde tipos básicos de instruções e regras de escopo até lógica condicional e iterativa avançada. Também introduz técnicas robustas de tratamento de erros usando mecanismos de exceções do C++ e a hierarquia de exceções da biblioteca padrão.

Resultados de Aprendizagem:

  • Diferenciar entre instruções nulas, simples e compostas e gerenciar escopo de variáveis nessas estruturas.
  • Implementar decisões complexas usando instruções if e switch, resolvendo erros lógicos como o "else pendurado".
  • Selecionar e aplicar a construção iterativa apropriada (while, for, for com faixa, do while) para tarefas específicas de programação.

🔹 Aula 9: Design de Funções e Passagem de Argumentos

Visão Geral: Esta aula aborda a arquitetura das funções em C++, focando na forma como dados são passados para e retornados de blocos de código modulares. Explora o ciclo de vida de objetos locais, os mecanismos de passagem de argumentos (por valor vs. por referência) e o padrão C++11 para tratar parâmetros variáveis. Domínio desses conceitos permite aos programadores escrever código eficiente, reutilizável e seguro em termos de memória.

Resultados de Aprendizagem:

  • Diferenciar entre métodos de inicialização de parâmetros e seu impacto em desempenho e integridade dos dados.
  • Implementar interfaces de função robustas usando qualificadores const, initializer_list e técnicas de passagem de arrays.
  • Gerenciar corretamente o ciclo de vida de objetos usando durações de armazenamento automáticas e estáticas.

🔹 Aula 10: Funcionalidades Avançadas e Sobrecarga

Visão Geral: Esta aula aborda os mecanismos intrincados das funções em C++, focando na passagem de parâmetros, ciclo de vida de objetos e complexidades da sobrecarga de funções. Os alunos dominarão recursos do C++11, como initializer_list para parâmetros variáveis, funções constexpr e a declaração e uso de ponteiros para funções para criar código flexível e modular.

Resultados de Aprendizagem:

  • Diferenciar entre passagem por valor e passagem por referência e identificar quando usar parâmetros const.
  • Aplicar as regras de resolução de sobrecarga para determinar o "melhor ajuste" entre funções candidatas e viáveis.
  • Implementar e gerenciar ponteiros para funções, incluindo seu uso em contêineres como vetores e como tipos de retorno.

🔹 Aula 11: Encapsulamento de Classe e Construtores

Visão Geral: Esta aula aborda a transição de estruturas de dados simples para Tipos Abstratos de Dados (ADTs) em C++. Foca nos mecanismos de design de classe, incluindo funções membro, o ponteiro implícito this e o papel crítico dos construtores na inicialização de objetos. Além disso, explora o encapsulamento por meio de controle de acesso (public/private) e o uso de "amigos" para manter uma interface limpa enquanto oculta detalhes de implementação.

Resultados de Aprendizagem:

  • Projetar e implementar uma classe C++ (como Sales_data) que separa sua interface de sua implementação.
  • Dominar as regras de inicialização de objetos usando construtores padrão, sobrecarregados e explícitos.
  • Aplicar especificadores de acesso e amizade para garantir encapsulamento e gerenciar escopo de classe.

🔹 Aula 12: Escopo de Classe e Gestão de Conversões

Visão Geral: Esta aula aborda os mecanismos avançados de design de classe em C++, focando na transição de estruturas de dados simples para ADTs robustos. Temas principais incluem gerenciar inicialização de objetos por meio de diferentes tipos de construtores, controlar conversões de tipo implícitas usando a palavra-chave explicit e compreender entidades de nível de classe como membros static e classes literais.

Resultados de Aprendizagem:

  • Projetar e implementar classes encapsuladas (ADTs) usando especificadores de acesso e declarações de amigos.
  • Gerenciar conversões implícitas de tipo de classe e suprimi-las usando a palavra-chave explicit.
  • Implementar e inicializar membros static de classe para gerenciamento de dados em todo o contexto da classe.

🔹 Aula 13: Entrada/Saída de Streams e Noções Básicas de Contêineres Sequenciais

Visão Geral: Esta aula cobre os mecanismos fundamentais do sistema de I/O da biblioteca padrão C++ e contêineres sequenciais. Os alunos aprenderão a gerenciar estados de condição de stream e buffers de saída, realizar I/O com arquivos e strings, e navegar pelos contêineres da biblioteca. A aula enfatiza conceitos críticos como intervalos de iteradores, inicialização de contêineres e implicações de desempenho do gerenciamento de memória de contêineres.

Resultados de Aprendizagem:

  • Interrogar e reiniciar estados de condição de stream e controlar o esvaziamento de buffer de saída para gerenciar integridade de stream.
  • Utilizar fstream e sstream para manipulação persistente e em memória de dados usando diversos modos de arquivo.
  • Escolher contêineres sequenciais apropriados com base em padrões de acesso e sobrecarga de memória para otimizar seleção.

🔹 Aula 14: Operações de Contêineres e Algoritmos Genéricos

Visão Geral: Esta aula aborda a gestão de contêineres sequenciais do C++ e a aplicação de algoritmos genéricos para processar dados independentemente dos tipos de contêineres. Explora como os contêineres gerenciam crescimento de memória e o ciclo de vida de elementos, juntamente com o uso de lambdas e binders de função para personalizar algoritmos da biblioteca. Os alunos dominarão a arquitetura da biblioteca, incluindo categorias de iteradores e algoritmos especializados.

Resultados de Aprendizagem:

  • Gerenciar ciclos de vida de contêineres usando operações especializadas para forward_list, técnicas de redimensionamento e gerenciamento de capacidade de vector.
  • Realizar manipulações complexas de strings e conversões numéricas usando a biblioteca string expandida e adaptadores de contêineres.
  • Implementar algoritmos genéricos para ler, escrever e reordenar dados, personalizando comportamento por meio de predicados, expressões lambda e std::bind.

🔹 Aula 15: Contêineres Associativos e Ponteiros Inteligentes

Visão Geral: Esta aula aborda o padrão C++11 para contêineres associativos e gerenciamento de memória dinâmica. Detalha o uso de contêineres ordenados e não ordenados para recuperação eficiente baseada em chaves e a implementação de código robusto e seguro contra exceções usando ponteiros inteligentes. A aula conclui com o projeto de uma aplicação realista de Consulta de Texto que integra essas estruturas de dados complexas.

Resultados de Aprendizagem:

  • Implementar e manipular contêineres associativos usando técnicas eficientes de busca, inserção e indexação.
  • Dominar o gerenciamento de memória dinâmica ao migrar de new/delete manual para ponteiros inteligentes baseados em RAII e a classe allocator.
  • Projetar sistemas complexos que compartilham dados com segurança entre classes usando contagem de referências e propriedade de ponteiros inteligentes.

🔹 Aula 16: Gestão de Recursos e Semântica de Movimentação

Visão Geral: Esta aula explora como classes C++ controlam o ciclo de vida de seus recursos por meio das "Cinco Funções Membro Especiais". Os alunos aprenderão a gerenciar memória dinâmica usando estratégias semelhantes a valores e ponteiros, implementar o idiom seguro contra exceções "copy-and-swap", e otimizar desempenho usando semântica de movimentação do C++11 e referências rvalue.

Resultados de Aprendizagem:

  • Implementar e explicar a Regra de Três/Cinco para garantir gerenciamento adequado de recursos e prevenir vazamentos de memória.
  • Diferenciar entre comportamentos semelhantes a valores e ponteiros em classes e implementar contagem de referências.
  • Aplicar semântica de movimentação usando referências rvalue e std::move para eliminar cópias profundas desnecessárias de grandes objetos.

🔹 Aula 17: Sobrecarga de Operadores e Herança (POO)

Visão Geral: Esta aula explora a extensão da sintaxe da linguagem por meio da sobrecarga de operadores e a construção de sistemas extensíveis por meio da Programação Orientada a Objetos (POO). Os alunos aprenderão a projetar classes que se integram às operações embutidas, dominando os mecanismos de herança, vinculação dinâmica e hierarquias polimórficas de classes.

Resultados de Aprendizagem:

  • Projetar e implementar operadores sobrecarregados que sigam convenções da biblioteca padrão C++.
  • Criar e utilizar objetos funcionais e o tipo wrapper function para unificar entidades invocáveis.
  • Construir hierarquias de herança robustas usando funções virtuais, classes abstratas e especificadores de acesso do C++11.

🔹 Aula 18: Templates e Programação Genérica

Visão Geral: Esta aula aborda os mecanismos fundamentais e avançados dos templates do C++, fornecendo a base para a programação genérica. Os alunos passarão de definir templates básicos de função e classe para dominar recursos específicos do C++11, como templates variádicos, encaminhamento perfeito e especialização de templates.

Resultados de Aprendizagem:

  • Definir e instanciar templates de função e classe usando parâmetros de tipo e não tipo.
  • Gerenciar o modelo de compilação de templates e controlar instanciação em múltiplos arquivos usando extern template.
  • Implementar técnicas avançadas de dedução, incluindo tipos de retorno em traseira e encaminhamento perfeito com std::forward.

🔹 Aula 19: Ferramentas Avançadas da Biblioteca e Grandes Sistemas

Visão Geral: Esta aula aborda componentes avançados da biblioteca padrão C++11 e recursos da linguagem destinados ao desenvolvimento de sistemas complexos. Cobertura de estruturas de dados especializadas, correspondência de padrões robusta via biblioteca regex, e ferramentas arquitetônicas para programação em larga escala. Além disso, explora tratamento avançado de exceções, gerenciamento de namespaces e as complexidades da herança múltipla.

Resultados de Aprendizagem:

  • Utilizar tuple para múltiplos valores de retorno e bitset para gerenciamento eficiente de flags a nível de bit.
  • Implementar correspondência de padrões complexos, validação e transformação de strings usando a biblioteca regex.
  • Gerar números aleatórios de alta qualidade usando motores e distribuições, mantendo estado e sementes apropriados.