Menu
Coddy logo textTech

Riepilogo - Contenitore generico

Fa parte della sezione Programmazione orientata agli oggetti del percorso C++ di Coddy. Lezione 69 di 104.

challenge icon

Sfida

Facile

Costruiamo un modello di classe GenericContainer che riunisce tutto ciò che hai imparato sui modelli in questo capitolo. Creerai un contenitore flessibile e sicuro rispetto ai tipi, in grado di memorizzare elementi dinamicamente e fornire operazioni utili tramite tecniche basate sui modelli.

Organizzerai il codice in due file:

  • GenericContainer.h: definisci qui il modello della classe. Il tuo GenericContainer dovrebbe:

    Memorizzare gli elementi dinamicamente usando un puntatore a un array, tenendo traccia anche della dimensione corrente e della capacità.

    Fornire questi metodi essenziali:

    • Un costruttore che accetta una capacità iniziale
    • Un distruttore che libera correttamente la memoria dinamica
    • push(T value): aggiunge un elemento al contenitore (presumi che la capacità sia sempre sufficiente per questa sfida)
    • get(size_t index): restituisce l'elemento all'indice specificato
    • getSize(): restituisce il numero attuale di elementi

    Aggiungi un modello di funzione chiamato printContainer che accetta un GenericContainer<T>& e stampa tutti gli elementi separati da spazi, seguiti da una nuova riga.

    Crea una specializzazione del modello di printContainer per GenericContainer<bool> che stampa true o false invece di 1 o 0.

    Aggiungi un modello di funzione variadica chiamato pushAll che accetta un GenericContainer<T>& e un qualsiasi numero di valori, inserendoli uno per uno nel contenitore usando un'espressione fold.

  • main.cpp: leggi cinque valori (ciascuno su una riga separata):
    1. Primo intero
    2. Secondo intero
    3. Terzo intero
    4. Un valore double
    5. Un booleano come stringa (true o false)

    Mostra il funzionamento del contenitore:

    1. Crea un GenericContainer<int> con capacità 10
    2. Usa pushAll per aggiungere tutti e tre gli interi in una volta sola
    3. Stampa la dimensione: Int container size: <size>
    4. Chiama printContainer per visualizzare gli interi
    5. Crea un GenericContainer<double> con capacità 5
    6. Aggiungi il valore double e il valore letterale 2.5 usando chiamate individuali a push
    7. Chiama printContainer per visualizzare i valori double
    8. Crea un GenericContainer<bool> con capacità 5
    9. Aggiungi il valore booleano in input e il valore letterale false
    10. Chiama printContainer per visualizzare i valori booleani (dovrebbe mostrare true/false)

Ad esempio, con gli input 10, 20, 30, 3.14 e true:

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

Questa sfida combina i modelli di classe per il contenitore, la specializzazione dei modelli per la stampa personalizzata dei booleani e i modelli variadici per la funzione flessibile pushAll. Il contenitore gestisce la propria memoria seguendo i principi RAII, mostrando come i modelli si integrino con una corretta gestione delle risorse.

Provalo tu

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

using namespace std;

int main() {
    // Leggi gli input
    int num1, num2, num3;
    double doubleVal;
    string boolStr;
    
    cin >> num1;
    cin >> num2;
    cin >> num3;
    cin >> doubleVal;
    cin >> boolStr;
    
    // Converti la stringa in bool
    bool boolVal = (boolStr == "true");
    
    // TODO: Crea un GenericContainer<int> con capacità 10
    
    // TODO: Usa pushAll per aggiungere tutti e tre gli interi in una sola volta
    
    // TODO: Stampa la dimensione: "Int container size: <size>"
    
    // TODO: Chiama printContainer per visualizzare gli interi
    
    // TODO: Crea un GenericContainer<double> con capacità 5
    
    // TODO: Inserisci il valore double e 2.5 usando chiamate separate a push
    
    // TODO: Chiama printContainer per visualizzare i valori double
    
    // TODO: Crea un GenericContainer<bool> con capacità 5
    
    // TODO: Inserisci l'input booleano e false
    
    // TODO: Chiama printContainer per visualizzare i valori booleani
    
    return 0;
}

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore C++ online