Récapitulatif - Gestionnaire de tableaux dynamiques
Fait partie de la section Programmation Orientée Objet du Journey C++ de Coddy — leçon 17 sur 104.
Défi
FacileConstruisons une classe DynamicArray qui gère sa propre mémoire, en s'agrandissant automatiquement si nécessaire — exactement comme std::vector fonctionne en coulisses !
Vous allez créer deux fichiers pour organiser votre code :
DynamicArray.h: Définissez une classeDynamicArrayqui gère un tableau d'entiers de taille dynamique. Votre classe doit avoir :- Des membres privés : un pointeur vers le tableau de données, la taille actuelle (nombre d'éléments) et la capacité (espace alloué)
- Un constructeur qui prend une capacité initiale, alloue le tableau sur le tas (heap) et initialise la taille à 0
- Un destructeur qui libère la mémoire allouée et affiche
"DynamicArray destroyed" - Une méthode
push(int value)qui ajoute un élément au tableau. Si le tableau est plein, elle doit doubler la capacité en allouant un nouveau tableau plus grand, en copiant les éléments existants et en libérant l'ancien tableau - Une méthode
get(size_t index)qui retourne l'élément à l'index donné - Une méthode
getSize()qui retourne le nombre actuel d'éléments - Une méthode
getCapacity()qui retourne la capacité actuelle
main.cpp: Lisez une capacité initiale et un nombre de valeurs à ajouter. Ensuite, lisez ce nombre de valeurs entières et poussez chacune d'elles dans votre DynamicArray. Après avoir ajouté toutes les valeurs, affichez :"Size: <size>""Capacity: <capacity>""Elements: <e1> <e2> ..."(tous les éléments séparés par des espaces)
Le format d'entrée sera :
- Première ligne : capacité initiale (entier)
- Deuxième ligne : nombre de valeurs à ajouter (entier)
- Lignes suivantes : une valeur entière par ligne
Lors du redimensionnement, votre tableau doit doubler sa capacité. Par exemple, si vous commencez avec une capacité de 2 et que vous poussez un troisième élément, la capacité doit devenir 4. Cela démontre le principe RAII — votre classe acquiert de la mémoire dans le constructeur et la libère dans le destructeur, garantissant ainsi l'absence de fuites de mémoire.
Incluez votre fichier d'en-tête dans main.cpp en utilisant #include "DynamicArray.h".
Essayez vous-même
#include <iostream>
#include "DynamicArray.h"
using namespace std;
int main() {
// Lire la capacité initiale
int initialCapacity;
cin >> initialCapacity;
// Lire le nombre de valeurs à ajouter
int numValues;
cin >> numValues;
// TODO: Créer un DynamicArray avec la capacité initiale
// TODO: Lire numValues entiers et ajouter chacun dans le tableau
// TODO: Afficher "Size: <size>"
// TODO: Afficher "Capacity: <capacity>"
// TODO: Afficher "Elements: <e1> <e2> ..." (tous les éléments séparés par des espaces)
return 0;
}
Toutes les leçons de Programmation Orientée Objet
1Fondamentaux de la POO
Fichiers externesBuild et Compilation C++Fichiers d'en-tête et Fichiers sourceEspaces de noms et PortéeIntroduction à la POO en C++Classes vs ObjetsLe pointeur 'this'Méthodes (Fonctions membres)Attributs (Membres de données)Bases des Ctors et DtorsRécapitulatif - Calculatrice simple4Propriétés de classe
Membres d'instance vs membres statiquesGetters et SettersFonctions membres constMot-clé mutableMéthodes et variables statiquesFonctions et classes amiesRécapitulatif - Gestionnaire de compte bancaire7Héritage
Héritage de baseNiveaux d'accès à l'héritageOrdre d'appel des Ctor et DtorRedéfinition de méthodesFonctions virtuelles et VTableHéritage multipleHéritage virtuelRécapitulatif - Hiérarchie des employés10Présentation de la STL
Présentation et philosophie de la STLConteneurs de la STLItérateursAlgorithmes de la STLFoncteurs et expressions lambdaRécapitulatif - Fréquence des mots13Patrons de conception, Partie 1
Introduction aux patrons de conceptionPatron SingletonFabrique & Fabrique abstraitePatron MonteurPatron ObservateurPatron Stratégie2Gestion de la mémoire
Mémoire Pile vs TasPointeurs et RéférencesMémoire dynamique (new/delete)Smart Pointers 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 d'informationStruct vs ClassClasses imbriquées et internesRécapitulatif - Système de gestion d'étudiants8Polymorphisme
Polymorphisme : Compilation vs ExécutionSurcharge de fonctionsRetour sur les fonctions virtuellesFonctions virtuelles puresClasses abstraitesConception d'interfaces en C++Dynamic Casting & RTTIRécapitulatif - Calculateur de formes11Concepts avancés de la POO
Composition vs HéritageMixins via CRTPIdiome PimplEffacement de typeEnum Classes & Typage fortGestion des exceptions en POOHiérarchies d'exceptions personnalisées14Patrons de conception, Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Template MethodPatron ÉtatPatron CompositeRAII en tant que patron3Constructeurs et Destructeurs
Constructeur par défautConstructeur paramétréConstructeur de copieConstructeur de déplacementListes d'initialisation du constructeurConstructeurs déléguésAnalyse approfondie du destructeurRègle de trois / cinq / zéroRécapitulatif - Classe String6Surcharge d'opérateurs
Introduction à la surcharge d'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 de templatesTemplates variadiquesBases de SFINAE & Type TraitsRécapitulatif - Conteneur générique