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


🎯 Nível 1: Fundamentos

Problema 11.1 — Hierarquia de Classes com Herança Pública e virtual Destructor

Contexto: Hierarquia de Classes com Herança Pública e virtual Destructor no contexto de Herança, Polimorfismo Dinâmico, Métodos Virtuais e VTable.

Requisitos de Execução:

  1. Criar classe base com destrutor virtual garantindo a desalocação correta de classes derivadas.

Resultado Esperado

Destrutor virtual assegura limpeza completa do objeto derivado.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_11_1_SeuNome
  2. Envie na tarefa: Atividade Cap 11 - Herança, Polimorfismo Dinâmico, Métodos Virtuais e VTable
🔑 Gabarito de Código & Solução Comentada
#include <iostream>

class Animal {
public:
    virtual ~Animal() { std::cout << "Destrutor Animal\n"; }
    virtual void emitir_som() const = 0; // Metodo puramente virtual
};

class Cachorro : public Animal {
public:
    ~Cachorro() override { std::cout << "Destrutor Cachorro\n"; }
    void emitir_som() const override { std::cout << "Au Au!\n"; }
};

int main() {
    Animal* a = new Cachorro();
    a->emitir_som();
    delete a;
    return 0;
}

🔍 Nível 2: Prática

Problema 11.2 — Uso Obrigatório de override e final no C++ Moderno

Contexto: Uso Obrigatório de override e final no C++ Moderno no contexto de Herança, Polimorfismo Dinâmico, Métodos Virtuais e VTable.

Requisitos de Execução:

  1. Impedir sobrescritas acidentais com override e selar classe contra herança posterior com final.

Resultado Esperado

Compilador valida assinatura e bloqueia herança indevida em classe selada.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_11_2_SeuNome
  2. Envie na tarefa: Atividade Cap 11 - Herança, Polimorfismo Dinâmico, Métodos Virtuais e VTable
🔑 Gabarito de Código & Solução Comentada
#include <iostream>

class ServicoBase {
public:
    virtual ~ServicoBase() = default;
    virtual void autenticar() = 0;
};

class ServicoProducao final : public ServicoBase {
public:
    void autenticar() override { std::cout << "Autenticado via SSO Corporativo.\n"; }
};

int main() {
    ServicoProducao s;
    s.autenticar();
    return 0;
}

⚡ Nível 3: Integração

Problema 11.3 — Inspeção Conceitual da Tabela de Métodos Virtuais (VTable/VPtr)

Contexto: Inspeção Conceitual da Tabela de Métodos Virtuais (VTable/VPtr) no contexto de Herança, Polimorfismo Dinâmico, Métodos Virtuais e VTable.

Requisitos de Execução:

  1. Demonstrar como o despacho dinâmico de métodos virtuais utiliza ponteiro VPtr indexando a VTable em tempo de execução.

Resultado Esperado

Despacho polimórfico dinâmico executado via ponteiro de classe base.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_11_3_SeuNome
  2. Envie na tarefa: Atividade Cap 11 - Herança, Polimorfismo Dinâmico, Métodos Virtuais e VTable
🔑 Gabarito de Código & Solução Comentada
#include <iostream>
#include <vector>
#include <memory>

struct Forma { virtual ~Forma() = default; virtual double area() const = 0; };
struct Retangulo : Forma {
    double l, a;
    Retangulo(double l, double a) : l(l), a(a) {}
    double area() const override { return l * a; }
};

int main() {
    std::vector<std::unique_ptr<Forma>> formas;
    formas.push_back(std::make_unique<Retangulo>(10, 5));
    std::cout << "Area polimorfica: " << formas[0]->area() << std::endl;
    return 0;
}

🏆 Nível 4: Desafio Corporativo

Problema 11.4 — Polimorfismo Estático com CRTP (Curiously Recurring Template Pattern)

Contexto: Polimorfismo Estático com CRTP (Curiously Recurring Template Pattern) no contexto de Herança, Polimorfismo Dinâmico, Métodos Virtuais e VTable.

Requisitos de Execução:

  1. Implementar polimorfismo em tempo de compilação eliminando o custo de VTable via CRTP.

Resultado Esperado

Despacho polimórfico resolvido 100% em tempo de compilação sem overhead de VPtr.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_11_4_SeuNome
  2. Envie na tarefa: Atividade Cap 11 - Herança, Polimorfismo Dinâmico, Métodos Virtuais e VTable
🔑 Gabarito de Código & Solução Comentada
#include <iostream>

template <typename T>
struct InterfaceCRTP {
    void executar() { static_cast<T*>(this)->implementacao(); }
};

struct DriverConcreto : InterfaceCRTP<DriverConcreto> {
    void implementacao() { std::cout << "Driver CRTP executado com Zero Overhead!\n"; }
};

int main() {
    DriverConcreto d;
    d.executar();
    return 0;
}