Rückblick: String-Wrapper
Teil des Abschnitts Object Oriented Programming der C-Journey von Coddy — Lektion 16 von 61.
Aufgabe
EinfachLassen Sie uns ein StringObject-Modul erstellen, das ein dynamisch zugewiesenes Zeichen-Array kapselt. Diese Wiederholungs-Challenge führt den kompletten Objekt-Lebenszyklus zusammen – Konstruktor, schreibgeschützte Methode und Destruktor – die alle zusammenarbeiten, um den Speicher sicher zu verwalten.
Sie werden drei Dateien erstellen:
stringobj.h: Deklarieren Sie eineStringObject-Struktur mit einem einzigen Mitglied:char *text(ein Zeiger auf einen dynamisch zugewiesenen String). Deklarieren Sie außerdem drei Funktionen:create_string— nimmt eineconst char *Eingabe entgegen und gibt einen Zeiger auf ein neu zugewiesenes StringObject zurückprint_string— nimmt einconst StringObject *entgegen und zeigt den gespeicherten Text anfree_string— nimmt einStringObject *entgegen und gibt den gesamten zugewiesenen Speicher frei
STRINGOBJ_H.stringobj.c: Implementieren Sie alle drei Funktionen. Ihr Konstruktor sollte Speicher für die Struktur reservieren, dann Speicher für den Text reservieren (denken Sie anstrlenplus eins für den Null-Terminator) und den Eingabestring kopieren. Ihr Destruktor muss in umgekehrter Reihenfolge freigeben – zuerst den internentext-Puffer, dann die Struktur selbst. Fügen Sie zur Sicherheit eine NULL-Prüfung in Ihren Destruktor ein.main.c: Verwenden Sie Ihr Modul, um ein String-Objekt zu erstellen, seinen Inhalt anzuzeigen und anschließend ordnungsgemäß aufzuräumen.
Sie erhalten eine Eingabe: einen text string, der in Ihrem StringObject gespeichert werden soll.
Erstellen Sie in Ihrer Hauptdatei ein StringObject mit dem bereitgestellten Text, geben Sie dessen Inhalt aus, geben Sie den Speicher frei und geben Sie dann eine Bestätigungsmeldung aus.
Die Funktion print_string sollte in diesem Format ausgeben:
Text: {text}Geben Sie nach dem Freigeben Folgendes aus:
FreedZum Beispiel wäre bei der Eingabe Hello World die Ausgabe:
Text: Hello World
FreedProbier es selbst
#include <stdio.h>
#include "stringobj.h"
int main() {
char input[256];
fgets(input, sizeof(input), stdin);
// Zeilenumbruch entfernen, falls vorhanden
int len = 0;
while (input[len] != '\0') len++;
if (len > 0 && input[len - 1] == '\n') {
input[len - 1] = '\0';
}
// TODO: Ein StringObject mit dem eingegebenen Text erstellen
// TODO: Den String mit print_string ausgeben
// TODO: Das StringObject mit free_string freigeben
// TODO: "Freed" ausgeben, um die Bereinigung zu bestätigen
return 0;
}
Alle Lektionen in Object Oriented Programming
1Grundlagen der modularen Programmierung
Header-DateienInclude GuardsQuelldateienStatische FunktionenWiederholung: Modularer Taschenrechner4Kapselung
Konzept der Opaque PointersOpaque Structs definierenGetter und SetterValidierung in SetternRückblick: Die geheime Box2Objekte und Methoden
Structs als ObjekteDer 'Self'-PointerConst-CorrectnessPointer vs. WertHilfsmethodenZusammenfassung: Point Manager5Projekt: Einfaches Bankkonto
Projekt-SetupImplementierung des Kontos3Objekt-Lebenszyklus
Konstruktor-MusterDestruktor-MusterStack-InitialisierungTiefe KopieRückblick: String-Wrapper6Vererbung durch Komposition
Struct-EinbettungDie First-Member-RegelZugriff auf Parent-MemberUpcastingRückblick: Formenhierarchie9Projekt: Formen-Zeichner
ProjektübersichtKreis-Implementierung