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.
Défi
FacileConstruisons 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. VotreGenericContainerdevra :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é
printContainerqui accepte unGenericContainer<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
printContainerpourGenericContainer<bool>qui affichetrueoufalseau lieu de1ou0.Ajoutez un modèle de fonction variadique appelé
pushAllqui accepte unGenericContainer<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) :- Premier entier
- Deuxième entier
- Troisième entier
- Une valeur double
- Un booléen sous forme de chaîne (
trueoufalse)
Démontrez le fonctionnement de votre conteneur en :
- Créant un
GenericContainer<int>d’une capacité de 10 - Utilisant
pushAllpour ajouter les trois entiers en une seule fois - Affichant la taille :
Int container size: <size> - Appelant
printContainerpour afficher les entiers - Créant un
GenericContainer<double>d’une capacité de 5 - Ajoutant la valeur double et le littéral
2.5à l’aide d’appels individuels àpush - Appelant
printContainerpour afficher les valeurs doubles - Créant un
GenericContainer<bool>d’une capacité de 5 - Ajoutant l’entrée booléenne et le littéral
false - Appelant
printContainerpour afficher les booléens (doit affichertrue/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
1Fondamentaux de la POO
Fichiers externesGénération et compilation en C++Fichiers d’en-tête et fichiers sourceEspaces de noms et portéeIntroduction à la POO en C++Classes et objetsLe pointeur « this »Méthodes (fonctions membres)Attributs (membres de données)Bases des constructeurs et destructeursRécapitulatif - Calculatrice simple4Propriétés de classe
Membres d’instance et statiquesAccesseurs et mutateursFonctions membres constMot-clé mutableMéthodes et variables statiquesFonctions et classes amiesRécapitulatif - Gestionnaire de compte bancaire7Héritage
Héritage de baseNiveaux d’accès de l’héritageOrdre d’appel des constructeurs et destructeursRedéfinition des méthodesFonctions virtuelles et VTableHéritage multipleHéritage virtuelRécapitulatif : hiérarchie des employés10Vue d’ensemble de la STL
Vue d’ensemble et philosophie de la STLConteneurs de la STLItérateursAlgorithmes de la STLFoncteurs et expressions lambdaRécapitulatif - fréquence des mots13Modèles de conception, partie 1
Introduction aux modèles de conceptionModèle SingletonFabrique et fabrique abstraiteModèle BuilderModèle ObserverModèle Strategy2Gestion de la mémoire
Mémoire de pile ou de tasPointeurs et référencesMémoire dynamique (new/delete)Pointeurs intelligents en C++RAII en C++Récapitulatif - Gestionnaire de tableaux dynamiques5Encapsulation
Spécificateurs d’accès en C++Spécificateurs d’accès en profondeurMasquage de l’informationStruct vs classeClasses imbriquées et internesRécapitulatif - Système de gestion des dossiers étudiants8Polymorphisme
Polymorphisme à la compilation vs à l’exécutionSurcharge de fonctionsRetour sur les fonctions virtuellesFonctions virtuelles puresClasses abstraitesConception d’interfaces en C++Conversion dynamique et RTTIRécapitulatif - Calculateur de formes3Constructeurs et destructeurs
Constructeur par défautConstructeur paramétréConstructeur de copieConstructeur de déplacementListes d’initialisation des constructeursConstructeurs déléguésApprofondissement des destructeursRègle des trois / cinq / zéroRécapitulatif - Classe String6Surcharge des opérateurs
Introduction à la surcharge des opérateursSurcharge des opérateurs arithmétiquesSurcharge des opérateurs de comparaisonOpérateurs de fluxSurcharge de l’opérateur d’affectationSurcharge des opérateurs [] et ()Opérateurs de conversion de typeRécapitulatif – Classe Matrix9Templates
Templates de fonctionsTemplates de classesSpécialisation des templatesTemplates variadiquesBases de SFINAE et des traits de typesRécapitulatif - Conteneur génériqueEntraînez-vous par vous-même : Compilateur C++ en ligne