Spec Sistemas Com Cpp • Trilha Progressiva em 4 Níveis


🎯 Nível 1: Fundamentos

Problema 09.1 — Classe com Encapsulamento e Lista de Inicialização de Membros

Contexto: Classe com Encapsulamento e Lista de Inicialização de Membros no contexto de Classes, Construtores, Destruidores e Encapsulamento (RAII).

Requisitos de Execução:

  1. Criar classe ContaBancaria com construtor inicializando saldo com lista : titular_{t}, saldo_{s}.

Resultado Esperado

Objeto instanciado com membros inicializados na lista de inicialização.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_09_1_SeuNome
  2. Envie na tarefa: Atividade Cap 09 - Classes, Construtores, Destruidores e Encapsulamento (RAII)
🔑 Gabarito de Código & Solução Comentada
#include <iostream>
#include <string>

class ContaBancaria {
private:
    std::string titular_;
    double saldo_;
public:
    ContaBancaria(std::string t, double s) : titular_{std::move(t)}, saldo_{s} {}
    void depositar(double v) { saldo_ += v; }
    double get_saldo() const { return saldo_; }
};

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

🔍 Nível 2: Prática

Problema 09.2 — Padrão RAII (Resource Acquisition Is Initialization)

Contexto: Padrão RAII (Resource Acquisition Is Initialization) no contexto de Classes, Construtores, Destruidores e Encapsulamento (RAII).

Requisitos de Execução:

  1. Criar classe guardiã que abra recurso no construtor e feche automaticamente no destruidor ~GuardiaoRecurso().

Resultado Esperado

Recurso liberado deterministicamente no momento da saída do escopo.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_09_2_SeuNome
  2. Envie na tarefa: Atividade Cap 09 - Classes, Construtores, Destruidores e Encapsulamento (RAII)
🔑 Gabarito de Código & Solução Comentada
#include <iostream>

class ArquivoGuard {
public:
    ArquivoGuard() { std::cout << "Recurso ALOCADO no construtor.\n"; }
    ~ArquivoGuard() { std::cout << "Recurso LIBERADO no destruidor.\n"; }
};

int main() {
    {
        ArquivoGuard guard;
        std::cout << "Executando operacoes dentro do bloco escopado...\n";
    } // Destruidor executado automaticamente aqui
    return 0;
}

⚡ Nível 3: Integração

Problema 09.3 — Regra dos Três/Cinco (Rule of 5) e Construtores de Cópia/Movimento

Contexto: Regra dos Três/Cinco (Rule of 5) e Construtores de Cópia/Movimento no contexto de Classes, Construtores, Destruidores e Encapsulamento (RAII).

Requisitos de Execução:

  1. Implementar construtor de cópia e operador de atribuição profunda em classe que gerencie heap.

Resultado Esperado

Cópia profunda executada garantindo buffers independentes.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_09_3_SeuNome
  2. Envie na tarefa: Atividade Cap 09 - Classes, Construtores, Destruidores e Encapsulamento (RAII)
🔑 Gabarito de Código & Solução Comentada
#include <iostream>

class Buffer {
    int* ptr_;
public:
    Buffer(int val) : ptr_{new int(val)} {}
    ~Buffer() { delete ptr_; }
    Buffer(const Buffer& outro) : ptr_{new int(*outro.ptr_)} {} // Copia profunda
    int get() const { return *ptr_; }
};

int main() {
    Buffer b1{42};
    Buffer b2 = b1;
    std::cout << "Buffer clonado: " << b2.get() << std::endl;
    return 0;
}

🏆 Nível 4: Desafio Corporativo

Problema 09.4 — Membros Estáticos, Construtores Explícitos (explicit) e Métodos =delete

Contexto: Membros Estáticos, Construtores Explícitos (explicit) e Métodos =delete no contexto de Classes, Construtores, Destruidores e Encapsulamento (RAII).

Requisitos de Execução:

  1. Desabilitar conversões implícitas com explicit e proibir cópias com Buffer(const Buffer&) = delete.

Resultado Esperado

Cópias acidentais e conversões implícitas bloqueadas pelo compilador.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_09_4_SeuNome
  2. Envie na tarefa: Atividade Cap 09 - Classes, Construtores, Destruidores e Encapsulamento (RAII)
🔑 Gabarito de Código & Solução Comentada
#include <iostream>

class SocketConexao {
public:
    explicit SocketConexao(int porta) { std::cout << "Socket na porta " << porta << "\n"; }
    SocketConexao(const SocketConexao&) = delete; // Proíbe cópia
    SocketConexao& operator=(const SocketConexao&) = delete;
};

int main() {
    SocketConexao s{8080};
    return 0;
}