Menu
Coddy logo textTech

Resumen - Contenedor genérico

Parte de la sección Programación Orientada a Objetos del Journey de C++ de Coddy — lección 69 de 104.

challenge icon

Desafío

Fácil

Vamos a construir una plantilla de clase GenericContainer que reúna todo lo que has aprendido sobre plantillas en este capítulo. Crearás un contenedor flexible y de tipo seguro que puede almacenar elementos dinámicamente y proporcionar operaciones útiles a través de técnicas de plantillas.

Organizarás tu código en dos archivos:

  • GenericContainer.h: Define tu plantilla de clase aquí. Tu GenericContainer debe:

    Almacenar elementos dinámicamente usando un puntero a un arreglo, además de rastrear el tamaño actual y la capacidad.

    Proporcionar estos métodos principales:

    • Un constructor que reciba una capacidad inicial
    • Un destructor que limpie adecuadamente la memoria dinámica
    • push(T value) — añade un elemento al contenedor (asume que la capacidad siempre es suficiente para este desafío)
    • get(size_t index) — devuelve el elemento en el índice dado
    • getSize() — devuelve el número actual de elementos

    Añade una plantilla de función llamada printContainer que reciba un GenericContainer<T>& e imprima todos los elementos separados por espacios, seguidos de una nueva línea.

    Crea una especialización de plantilla de printContainer para GenericContainer<bool> que imprima true o false en lugar de 1 o 0.

    Añade una plantilla de función variádica llamada pushAll que reciba un GenericContainer<T>& y cualquier número de valores, insertando cada uno en el contenedor usando una expresión de plegado (fold expression).

  • main.cpp: Lee cinco entradas (cada una en una línea separada):
    1. Primer entero
    2. Segundo entero
    3. Tercer entero
    4. Un valor double
    5. Un booleano como cadena (true o false)

    Demuestra tu contenedor realizando lo siguiente:

    1. Crear un GenericContainer<int> con capacidad 10
    2. Usar pushAll para añadir los tres enteros a la vez
    3. Imprimir el tamaño: Int container size: <size>
    4. Llamar a printContainer para mostrar los enteros
    5. Crear un GenericContainer<double> con capacidad 5
    6. Insertar el valor double y el literal 2.5 usando llamadas individuales a push
    7. Llamar a printContainer para mostrar los doubles
    8. Crear un GenericContainer<bool> con capacidad 5
    9. Insertar la entrada booleana y el literal false
    10. Llamar a printContainer para mostrar los booleanos (debe mostrar true/false)

Por ejemplo, con las entradas 10, 20, 30, 3.14, y true:

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

Este desafío combina plantillas de clase para el contenedor, especialización de plantillas para la impresión personalizada de bool y plantillas variádicas para la función flexible pushAll. Tu contenedor gestiona su propia memoria siguiendo los principios de RAII, demostrando cómo las plantillas se integran con una gestión de recursos adecuada.

Pruébalo tú mismo

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

using namespace std;

int main() {
    // Leer entradas
    int num1, num2, num3;
    double doubleVal;
    string boolStr;
    
    cin >> num1;
    cin >> num2;
    cin >> num3;
    cin >> doubleVal;
    cin >> boolStr;
    
    // Convertir string a bool
    bool boolVal = (boolStr == "true");
    
    // TODO: Crear GenericContainer<int> con capacidad 10
    
    // TODO: Usar pushAll para añadir los tres enteros a la vez
    
    // TODO: Imprimir el tamaño: "Int container size: <size>"
    
    // TODO: Llamar a printContainer para mostrar los enteros
    
    // TODO: Crear GenericContainer<double> con capacidad 5
    
    // TODO: Hacer push del valor double y 2.5 usando llamadas push individuales
    
    // TODO: Llamar a printContainer para mostrar los doubles
    
    // TODO: Crear GenericContainer<bool> con capacidad 5
    
    // TODO: Hacer push de la entrada booleana y false
    
    // TODO: Llamar a printContainer para mostrar los booleanos
    
    return 0;
}

Todas las lecciones de Programación Orientada a Objetos