Menu
Coddy logo textTech

Recapitulação - Contêiner Genérico

Parte da seção Programação Orientada a Objetos do Journey de C++ da Coddy. Lição 69 de 104.

challenge icon

Desafio

Fácil

Vamos criar um modelo de classe GenericContainer que reúne tudo o que você aprendeu sobre modelos neste capítulo. Você criará um contêiner flexível e seguro quanto aos tipos, capaz de armazenar elementos dinamicamente e fornecer operações úteis por meio de técnicas de modelos.

Você organizará seu código em dois arquivos:

  • GenericContainer.h: defina seu modelo de classe aqui. Seu GenericContainer deve:

    Armazenar elementos dinamicamente usando um ponteiro para um array, além de acompanhar o tamanho e a capacidade atuais.

    Fornecer estes métodos essenciais:

    • Um construtor que recebe uma capacidade inicial
    • Um destrutor que libera corretamente a memória dinâmica
    • push(T value): adiciona um elemento ao contêiner (considere que a capacidade é sempre suficiente para este desafio)
    • get(size_t index): retorna o elemento no índice informado
    • getSize(): retorna o número atual de elementos

    Adicione um modelo de função chamado printContainer que recebe um GenericContainer<T>& e imprime todos os elementos separados por espaços, seguidos por uma nova linha.

    Crie uma especialização de modelo de printContainer para GenericContainer<bool> que imprime true ou false em vez de 1 ou 0.

    Adicione um modelo de função variádica chamado pushAll que recebe um GenericContainer<T>& e qualquer quantidade de valores, adicionando cada um deles ao contêiner usando uma expressão fold.

  • main.cpp: leia cinco entradas (cada uma em uma linha separada):
    1. Primeiro inteiro
    2. Segundo inteiro
    3. Terceiro inteiro
    4. Um valor double
    5. Um booleano como string (true ou false)

    Demonstre seu contêiner:

    1. Criando um GenericContainer<int> com capacidade 10
    2. Usando pushAll para adicionar os três inteiros de uma só vez
    3. Imprimindo o tamanho: Int container size: <size>
    4. Chamando printContainer para exibir os inteiros
    5. Criando um GenericContainer<double> com capacidade 5
    6. Adicionando o valor double e o literal 2.5 usando chamadas individuais de push
    7. Chamando printContainer para exibir os valores double
    8. Criando um GenericContainer<bool> com capacidade 5
    9. Adicionando a entrada booleana e o literal false
    10. Chamando printContainer para exibir os booleanos (deve mostrar true/false)

Por exemplo, com as entradas 10, 20, 30, 3.14 e true:

Int container size: 3
10 20 30 
3.14 2.5 
true false 

Este desafio combina modelos de classe para o contêiner, especialização de modelos para impressão personalizada de booleanos e modelos variádicos para a função flexível pushAll. Seu contêiner gerencia a própria memória seguindo os princípios de RAII, demonstrando como os modelos se integram ao gerenciamento adequado de recursos.

Experimente você mesmo

#include <iostream>
#include <string>
#include "GenericContainer.h"

using namespace std;

int main() {
    // Ler entradas
    int num1, num2, num3;
    double doubleVal;
    string boolStr;
    
    cin >> num1;
    cin >> num2;
    cin >> num3;
    cin >> doubleVal;
    cin >> boolStr;
    
    // Converter string para bool
    bool boolVal = (boolStr == "true");
    
    // TODO: Criar GenericContainer<int> com capacidade 10
    
    // TODO: Usar pushAll para adicionar todos os três inteiros de uma vez
    
    // TODO: Print the size: "Int container size: <size>"
    
    // TODO: Call printContainer to display the integers
    
    // TODO: Criar GenericContainer<double> com capacidade 5
    
    // TODO: Fazer push do valor double e 2.5 usando chamadas individuais de push
    
    // TODO: Call printContainer to display the doubles
    
    // TODO: Criar GenericContainer<bool> com capacidade 5
    
    // TODO: Fazer push da entrada booleana e false
    
    // TODO: Call printContainer to display the booleans
    
    return 0;
}

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Compilador de C++ online