Récapitulatif : String Wrapper
Fait partie de la section Programmation Orientée Objet du Journey C de Coddy. Leçon 16 sur 61.
Défi
FacileConstruisons un module StringObject qui encapsule un tableau de caractères alloué dynamiquement. Ce défi récapitulatif réunit le cycle de vie complet de l’objet, le constructeur, la méthode en lecture seule et le destructeur, qui fonctionnent ensemble pour gérer la memory en toute safety.
Vous allez créer trois fichiers :
stringobj.h: Declare une structureStringObjectavec un seulmember:char *text(unpointervers unestringallouée dynamiquement). Declare également trois fonctions :create_string: prend une entréeconst char *et returns unpointervers unStringObjectnouvellement allouéprint_string: prend unconst StringObject *et displays le texte stockéfree_string: prend unStringObject *et libère toute lamemoryallouée
STRINGOBJ_H.stringobj.c: Implement les trois fonctions. Votre constructeur doit allouer de lamemorypour la structure, puis allouer de lamemorypour le texte (n’oubliez passtrlenplus un pour le terminateurnull), et Copy lastringd’entrée. Votre destructeur doit libérer dans l’ordre inverse : le tampon internetextd’abord, puis la structure elle-même. Ajoutez une vérificationNULLdans votre destructeur pour lasafety.main.c: Utilisez votre module pour Create un objet chaîne, afficher son contenu, puis effectuer correctement le nettoyage.
Vous recevrez une entrée : une string de texte à stocker dans votre StringObject.
Dans votre fichier principal, Create un StringObject avec le texte fourni, affichez son contenu, libérez la memory, puis affichez un message de confirmation.
La fonction print_string doit produire le format suivant :
Text: {text}Après la libération, affichez :
FreedPar exemple, avec l’entrée Hello World, la sortie serait :
Text: Hello World
FreedEssayez vous-même
#include <stdio.h>
#include "stringobj.h"
int main() {
char input[256];
fgets(input, sizeof(input), stdin);
// Supprimer le saut de ligne s'il est présent
int len = 0;
while (input[len] != '\0') len++;
if (len > 0 && input[len - 1] == '\n') {
input[len - 1] = '\0';
}
// TODO: Create a StringObject with the input text
// TODO: Afficher la chaîne en utilisant print_string
// TODO: Free the StringObject using free_string
// TODO: Afficher "Freed" pour confirmer le nettoyage
return 0;
}
Toutes les leçons de Programmation Orientée Objet
1Bases de la programmation modulaire
Fichiers d'en-têteGardes d'inclusionFichiers sourcesFonctions statiquesRécapitulatif : Calculatrice modulaire4Encapsulation
Concept des pointeurs opaquesDéfinir des structures opaquesGetters et settersValidation dans les settersRécapitulatif : La boîte secrète2Objets et méthodes
Structs comme objetsLe pointeur 'Self'Rigueur du mot-clé constPointeur vs ValeurMéthodes utilitairesRécapitulatif : Point Manager5Projet : Compte bancaire simple
Configuration du projetImplémentation du compte8Polymorphisme
Pointeurs de fonctions dans les structuresSimulation de méthodesLe concept d'interfaceImplémentation d'interfacesItération polymorphiqueRécapitulatif : Greeter11Patrons de conception en C
Patron SingletonPatron FabriquePatron ItérateurRécapitulatif : Logger Factory3Cycle de vie des objets
Pattern de constructeurPattern de destructeurInitialisation sur la pileCopie profondeRécapitulatif : String Wrapper6Héritage par composition
Imbrication de structLa règle du premier membreAccès aux membres parentsUpcastingRécapitulatif : Hiérarchie des formes9Projet : Dessinateur de formes
Aperçu du projetImplémentation du cercleImplémentation du rectangleUtilisation polymorpheConteneur de formesEntraînez-vous par vous-même : Compilateur C en ligne