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

Construyamos una plantilla de clase GenericContainer que reúna todo lo que has aprendido sobre las plantillas en este capítulo. Crearás un contenedor flexible y seguro en cuanto a tipos que pueda almacenar elementos dinámicamente y proporcionar operaciones útiles mediante técnicas de plantillas.

Organizarás tu código en dos archivos:

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

    Almacenar elementos dinámicamente mediante un puntero a un arreglo, además de realizar un seguimiento del tamaño y la capacidad actuales.

    Proporcionar estos métodos principales:

    • Un constructor que acepte una capacidad inicial
    • Un destructor que libere correctamente la memoria dinámica
    • push(T value): añade un elemento al contenedor (supón que la capacidad siempre es suficiente para este desafío)
    • get(size_t index): devuelve el elemento en el índice indicado
    • getSize(): devuelve el número actual de elementos

    Añade una plantilla de función llamada printContainer que acepte un GenericContainer<T>& e imprima todos los elementos separados por espacios, seguidos de un salto de 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 acepte un GenericContainer<T>& y cualquier cantidad de valores, insertando cada uno en el contenedor mediante una expresión fold.

  • 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 de la siguiente manera:

    1. Crea un GenericContainer<int> con capacidad 10
    2. Usa pushAll para añadir los tres enteros a la vez
    3. Imprime el tamaño: Int container size: <size>
    4. Llama a printContainer para mostrar los enteros
    5. Crea un GenericContainer<double> con capacidad 5
    6. Añade el valor double y el literal 2.5 usando llamadas individuales a push
    7. Llama a printContainer para mostrar los valores double
    8. Crea un GenericContainer<bool> con capacidad 5
    9. Añade la entrada booleana y el literal false
    10. Llama a printContainer para mostrar los booleanos (debería 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 valores bool y plantillas variádicas para la función flexible pushAll. Tu contenedor administra su propia memoria siguiendo los principios de RAII, lo que demuestra cómo las plantillas se integran con una gestión adecuada de recursos.

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 agregar los tres enteros a la vez
    
    // TODO: Print the size: "Int container size: <size>"
    
    // TODO: Call printContainer to display the integers
    
    // TODO: Crear GenericContainer<double> con capacidad 5
    
    // TODO: Hacer push del valor double y 2.5 usando llamadas push individuales
    
    // TODO: Call printContainer to display the doubles
    
    // TODO: Crear GenericContainer<bool> con capacidad 5
    
    // TODO: Hacer push de la entrada booleana y false
    
    // TODO: Call printContainer to display the booleans
    
    return 0;
}

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de C++ online