🧩 Exercícios Práticos — Linguagem C++: POO, Templates e Standard Template Library (STL)

Instruções Gerais:

  • Resolva as atividades em ordem progressiva de maturidade.
  • Cada nível adiciona requisitos técnicos, tratamento de erros e casos de borda reais.
  • Consulte o gabarito comentado ao final de cada questão para autoavaliação.

🎯 Nível 1: Fundamentos

Problema 02.1 — Encapsulamento com Classes em C++ e Construtores

Contexto: Encapsulamento com Classes em C++ e Construtores no contexto de Linguagem C++: POO, Templates e Standard Template Library (STL).

Requisitos de Execução:

  1. Criar classe ContaBancaria com saldo privado e métodos depositar() e sacar().

Resultado Esperado

Classe instanciada com encapsulamento de estado.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_02_1_SeuNome
  2. Envie na tarefa: Atividade Cap 02 - Linguagem C++: POO, Templates e Standard Template Library (STL)
🔑 Gabarito de Código & Solução Comentada
#include <iostream>
#include <string>

class Conta {
private:
    std::string titular;
    double saldo;
public:
    Conta(std::string t, double s) : titular(t), saldo(s) {}
    void depositar(double v) { saldo += v; }
    double getSaldo() const { return saldo; }
};

int main() {
    Conta c("Carlos", 1000.0);
    c.depositar(250.0);
    std::cout << "Saldo atual: R$ " << c.getSaldo() << std::endl;
    return 0;
}

🔍 Nível 2: Prática

Problema 02.2 — Standard Template Library (STL): std::vector, std::map e Algoritmos

Contexto: Standard Template Library (STL): std::vector, std::map e Algoritmos no contexto de Linguagem C++: POO, Templates e Standard Template Library (STL).

Requisitos de Execução:

  1. Utilizar std::vector com std::sort e std::map para contagem de frequências.

Resultado Esperado

Coleções STL manipuladas com algoritmos canônicos.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_02_2_SeuNome
  2. Envie na tarefa: Atividade Cap 02 - Linguagem C++: POO, Templates e Standard Template Library (STL)
🔑 Gabarito de Código & Solução Comentada
#include <iostream>
#include <vector>
#include <algorithm>
#include <map>

int main() {
    std::vector<int> nums = {40, 10, 30, 20};
    std::sort(nums.begin(), nums.end());
    std::map<std::string, int> estoque = {{"Notebook", 5}, {"Mouse", 20}};
    std::cout << "Menor numero: " << nums[0] << " | Mouse no estoque: " << estoque["Mouse"] << std::endl;
    return 0;
}

⚡ Nível 3: Integração

Problema 02.3 — Gerenciamento RAII e Smart Pointers (std::unique_ptr)

Contexto: Gerenciamento RAII e Smart Pointers (std::unique_ptr) no contexto de Linguagem C++: POO, Templates e Standard Template Library (STL).

Requisitos de Execução:

  1. Gerenciar recurso dinâmico com std::unique_ptr garantindo liberação automática no fim de escopo.

Resultado Esperado

Smart pointers RAII eliminando risco de Memory Leak.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_02_3_SeuNome
  2. Envie na tarefa: Atividade Cap 02 - Linguagem C++: POO, Templates e Standard Template Library (STL)
🔑 Gabarito de Código & Solução Comentada
#include <iostream>
#include <memory>

class ConexaoBD {
public:
    ConexaoBD() { std::cout << "Conexao aberta.
"; }
    ~ConexaoBD() { std::cout << "Conexao liberada com seguranca (RAII).
"; }
};

int main() {
    auto conn = std::make_unique<ConexaoBD>();
    return 0;
}

🏆 Nível 4: Desafio Corporativo

Problema 02.4 — Templates Genéricos com Concepts em C++20

Contexto: Templates Genéricos com Concepts em C++20 no contexto de Linguagem C++: POO, Templates e Standard Template Library (STL).

Requisitos de Execução:

  1. Criar template restrito com std::integral que realize operações numéricas seguras.

Resultado Esperado

Templates modernos C++20 com checagem estática de restrições.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_02_4_SeuNome
  2. Envie na tarefa: Atividade Cap 02 - Linguagem C++: POO, Templates e Standard Template Library (STL)
🔑 Gabarito de Código & Solução Comentada
#include <iostream>
#include <concepts>

template<std::integral T>
T somarSegura(T a, T b) {
    return a + b;
}

int main() {
    std::cout << "Soma de inteiros com Concept: " << somarSegura(15, 25) << std::endl;
    return 0;
}