Menu
CoddyTech

Récapitulatif - Conteneur générique

Fait partie de la section Programmation Orientée Objet du Journey C++ de Coddy. Leçon 69 sur 104.

challenge icon

Défi

Facile

Construisons un modèle de classe GenericContainer qui rassemble tout ce que tu as appris sur les modèles dans ce chapitre. Tu vas créer un conteneur flexible et sûr du point de vue des types, capable de stocker des éléments de façon dynamique et de fournir des opérations utiles grâce aux techniques de programmation par modèles.

Tu vas organiser ton code dans deux fichiers :

  • GenericContainer.h : définis ici ton modèle de classe. Ton GenericContainer doit :

    Stocker les éléments de façon dynamique à l’aide d’un pointeur vers un tableau, tout en suivant la taille actuelle et la capacité.

    Fournir ces méthodes essentielles :

    • Un constructeur qui prend une capacité initiale
    • Un destructeur qui libère correctement la mémoire dynamique
    • push(T value) : ajoute un élément au conteneur (suppose que la capacité est toujours suffisante pour ce défi)
    • get(size_t index) : renvoie l’élément à l’index donné
    • getSize() : renvoie le nombre actuel d’éléments

    Ajoute un modèle de fonction appelé printContainer qui prend un GenericContainer<T>& et affiche tous les éléments séparés par des espaces, suivis d’un saut de ligne.

    Crée une spécialisation de modèle de printContainer pour GenericContainer<bool> qui affiche true ou false au lieu de 1 ou 0.

    Ajoute un modèle de fonction variadique appelé pushAll qui prend un GenericContainer<T>& et un nombre quelconque de valeurs, puis ajoute chacune d’elles au conteneur à l’aide d’une expression de repli. Une expression de repli sur l’opérateur virgule, telle que (container.push(args), ...);, exécute l’appel une fois par argument.

  • main.cpp : lis cinq valeurs d’entrée (une par ligne) :
    1. Premier entier
    2. Deuxième entier
    3. Troisième entier
    4. Une valeur de type double
    5. Un booléen sous forme de chaîne (true ou false)

    Démontre le fonctionnement de ton conteneur en :

    1. Créant un GenericContainer<int> d’une capacité de 10
    2. Utilisant pushAll pour ajouter les trois entiers en une seule fois
    3. Affichant la taille : Int container size: <size>
    4. Appelant printContainer pour afficher les entiers
    5. Créant un GenericContainer<double> d’une capacité de 5
    6. Ajoutant la valeur de type double et le littéral 2.5 à l’aide d’appels individuels à push
    7. Appelant printContainer pour afficher les valeurs de type double
    8. Créant un GenericContainer<bool> d’une capacité de 5
    9. Ajoutant la valeur booléenne saisie et le littéral false
    10. Appelant printContainer pour afficher les booléens (devrait afficher true/false)

Par exemple, avec les valeurs d’entrée 10, 20, 30, 3.14 et true :

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

Ce défi combine les modèles de classe pour le conteneur, la spécialisation de modèle pour l’affichage personnalisé des booléens et les modèles variadiques pour la fonction flexible pushAll. Ton conteneur gère lui-même sa mémoire en respectant les principes RAII, ce qui montre comment les modèles s’intègrent à une gestion correcte des ressources.

Essayez vous-même

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

using namespace std;

int main() {
    // Lire les entrées
    int num1, num2, num3;
    double doubleVal;
    string boolStr;
    
    cin >> num1;
    cin >> num2;
    cin >> num3;
    cin >> doubleVal;
    cin >> boolStr;
    
    // Convertir la chaîne en bool
    bool boolVal = (boolStr == "true");
    
    // TODO: Créer un GenericContainer<int> d’une capacité de 10
    
    // TODO: Utiliser pushAll pour ajouter les trois entiers en une seule fois
    
    // TODO: Afficher la taille : "Int container size: <size>"
    
    // TODO: Appeler printContainer pour afficher les entiers
    
    // TODO: Créer un GenericContainer<double> d’une capacité de 5
    
    // TODO: Ajouter la valeur double et 2.5 avec des appels distincts à push
    
    // TODO: Appeler printContainer pour afficher les valeurs double
    
    // TODO: Créer un GenericContainer<bool> d’une capacité de 5
    
    // TODO: Ajouter la valeur booléenne saisie et false
    
    // TODO: Appeler printContainer pour afficher les valeurs booléennes
    
    return 0;
}

Toutes les leçons de Programmation Orientée Objet

Entraînez-vous par vous-même : Compilateur C++ en ligne