Rückblick: String-Wrapper
Teil des Abschnitts Objektorientierte Programmierung der C-Journey von Coddy. Lektion 16 von 61.
Aufgabe
EinfachErstelle ein StringObject-Modul, das ein dynamisch reserviertes Zeichenarray kapselt. Diese Wiederholungsaufgabe führt den vollständigen Lebenszyklus eines Objekts, den Konstruktor, die schreibgeschützte Methode und den Destruktor zusammen, die alle gemeinsam für eine sichere Speicherverwaltung sorgen.
Du erstellst drei Dateien:
stringobj.h: Deklariere eineStringObject-Struktur mit einem einzigen Member:char *text(ein Zeiger auf eine dynamisch reservierte Zeichenkette). Deklariere außerdem drei Funktionen:create_string: nimmt einenconst char *-Eingabewert entgegen und gibt einen Zeiger auf ein neu reserviertes StringObject zurückprint_string: nimmt einenconst StringObject *entgegen und gibt den gespeicherten Text ausfree_string: nimmt einenStringObject *entgegen und gibt den gesamten reservierten Speicher frei
STRINGOBJ_H.stringobj.c: Implementiere alle drei Funktionen. Dein Konstruktor sollte Speicher für die Struktur reservieren, anschließend Speicher für den Text reservieren (denke anstrlenplus eins für das Nullzeichen) und die Eingabezeichenkette kopieren. Dein Destruktor muss in umgekehrter Reihenfolge freigeben: zuerst den internentext-Puffer, dann die Struktur selbst. Füge zur Sicherheit eine NULL-Prüfung in deinen Destruktor ein.main.c: Verwende dein Modul, um ein Stringobjekt zu erstellen, seinen Inhalt auszugeben und anschließend ordnungsgemäß aufzuräumen.
Du erhältst eine Eingabe: eine Textzeichenkette, die in deinem StringObject gespeichert werden soll.
Erstelle in deiner Hauptdatei ein StringObject mit dem bereitgestellten Text, gib seinen Inhalt aus, gib den Speicher frei und gib anschließend eine Bestätigungsnachricht aus.
Die Funktion print_string sollte in diesem Format ausgeben:
Text: {text}Gib nach dem Freigeben Folgendes aus:
FreedBeispielsweise würde die Ausgabe bei der Eingabe Hello World folgendermaßen aussehen:
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: Create a StringObject with the input text
// TODO: Gib den String mit print_string aus
// TODO: Free the StringObject using free_string
// TODO: Gib "Freed" aus, um die Bereinigung zu bestätigen
return 0;
}
Alle Lektionen in Objektorientierte Programmierung
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-ImplementierungRechteck-ImplementierungPolymorphe VerwendungShape-ContainerÜbe selbstständig: Online-C-Compiler