Menu
Coddy logo textTech

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 vous avez appris sur les modèles dans ce chapitre. Vous allez créer un conteneur flexible et sûr du point de vue des types, capable de stocker dynamiquement des éléments et de fournir des opérations utiles grâce aux techniques de modélisation.

Vous organiserez votre code dans deux fichiers :

  • GenericContainer.h : définissez-y votre modèle de classe. Votre GenericContainer devra :

    Stocker les éléments dynamiquement à l’aide d’un pointeur vers un tableau, tout en conservant la taille et la capacité actuelles.

    Fournir ces méthodes principales :

    • Un constructeur qui accepte une capacité initiale
    • Un destructeur qui libère correctement la mémoire dynamique
    • push(T value) : ajoute un élément au conteneur (supposez 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

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

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

    Ajoutez un modèle de fonction variadique appelé pushAll qui accepte un GenericContainer<T>& et un nombre quelconque de valeurs, en ajoutant chacune d’elles au conteneur à l’aide d’une expression de repli.

  • main.cpp : lisez cinq entrées (chacune sur une ligne distincte) :
    1. Premier entier
    2. Deuxième entier
    3. Troisième entier
    4. Une valeur double
    5. Un booléen sous forme de chaîne (true ou false)

    Démontrez le fonctionnement de votre 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 double et le littéral 2.5 à l’aide d’appels individuels à push
    7. Appelant printContainer pour afficher les valeurs doubles
    8. Créant un GenericContainer<bool> d’une capacité de 5
    9. Ajoutant l’entrée booléenne et le littéral false
    10. Appelant printContainer pour afficher les booléens (doit afficher true/false)

Par exemple, avec les entrées 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. Votre conteneur gère sa propre mémoire en suivant les principes RAII, ce qui montre comment les modèles s’intègrent à une gestion appropriée 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 string en bool
    bool boolVal = (boolStr == "true");
    
    // TODO: Créer GenericContainer<int> avec une capacité de 10
    
    // TODO: Utiliser pushAll pour ajouter les trois entiers en une seule fois
    
    // TODO: Print the size: "Int container size: <size>"
    
    // TODO: Call printContainer to display the integers
    
    // TODO: Créer GenericContainer<double> avec une capacité de 5
    
    // TODO: Pousser la valeur double et 2.5 en utilisant des appels push individuels
    
    // TODO: Call printContainer to display the doubles
    
    // TODO: Créer GenericContainer<bool> avec une capacité de 5
    
    // TODO: Pousser l'entrée booléenne et false
    
    // TODO: Call printContainer to display the booleans
    
    return 0;
}

Toutes les leçons de Programmation Orientée Objet

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