Menu
Coddy logo textTech

Rückblick: Die geheime Box

Teil des Abschnitts Objektorientierte Programmierung der C-Journey von Coddy. Lektion 21 von 61.

challenge icon

Aufgabe

Einfach

Lass uns ein Box-Modul erstellen, das vollständige Kapselung demonstriert. Deine Box wird drei verborgene Dimensionen haben: Breite, Höhe und Tiefe, auf die nur über die von dir bereitgestellten Funktionen zugegriffen werden kann. Hier kommt das vollständige Muster des opaken Zeigers zum Einsatz!

Du wirst drei Dateien erstellen:

  • box.h: Deine öffentliche Schnittstelle. Deklariere einen opaken Typ Box, indem du ausschließlich eine Vorwärtsdeklaration verwendest: Der Struct-Body bleibt verborgen. Deklariere diese Funktionen:
    • create_box: übernimmt drei Ganzzahlen (Breite, Höhe, Tiefe) und gibt einen Box-Zeiger zurück
    • destroy_box: gibt den reservierten Speicher frei
    • get_volume: übernimmt ein const Box * und gibt das Volumen zurück (Breite × Höhe × Tiefe)
    • set_dimensions: übernimmt einen Box-Zeiger und drei neue Dimensionswerte und gibt int zurück (1 bei Erfolg, 0, wenn eine Dimension negativ oder null ist)
    Verwende Include-Guards mit dem Symbol BOX_H.
  • box.c: Definiere die tatsächliche struct Box mit drei verborgenen Membern: int width, int height und int depth. Implementiere alle vier Funktionen. Dein Konstruktor sollte die Box reservieren und initialisieren. Die Funktion set_dimensions muss überprüfen, dass alle drei Werte positiv (größer als null) sind, bevor sie Änderungen anwendet. Wenn ein Wert die Validierung nicht besteht, lehne die gesamte Aktualisierung ab und gib 0 zurück.
  • main.c: Demonstriere deine gekapselte Box, indem du eine erstellst, ihr Volumen überprüfst, Dimensionsänderungen versuchst (sowohl gültige als auch ungültige) und anschließend ordnungsgemäß aufräumst.

Du erhältst fünf Eingaben: die anfängliche Breite, die anfängliche Höhe, die anfängliche Tiefe, gefolgt von drei neuen Dimensionen, deren Setzen versucht werden soll (sie können ungültige Werte enthalten).

Erstelle in deiner Hauptdatei eine Box mit den anfänglichen Dimensionen und gib ihr Volumen aus. Versuche anschließend, die neuen Dimensionen zu setzen: Gib aus, ob die Aktualisierung erfolgreich war, sowie das resultierende Volumen. Gib die Box schließlich frei und bestätige die Bereinigung.

Gib die Ausgabe in diesem Format aus:

Volume: {volume}
Set: {0 or 1}
Volume: {volume}
Destroyed

Bei den Eingaben 2, 3, 4, 5, 5, 5 würde die Ausgabe beispielsweise so aussehen:

Volume: 24
Set: 1
Volume: 125
Destroyed

Bei den Eingaben 2, 3, 4, -1, 5, 5 würde die Ausgabe so aussehen:

Volume: 24
Set: 0
Volume: 24
Destroyed

Beachte, wie die Validierung in set_dimensions deine Box vor ungültigen Zuständen schützt: Externer Code kann deine Regeln nicht umgehen, weil die Dimensionen vollständig hinter deiner Schnittstelle verborgen sind.

Probier es selbst

#include <stdio.h>
#include "box.h"

int main() {
    // Initiale Dimensionen einlesen
    int width, height, depth;
    scanf("%d", &width);
    scanf("%d", &height);
    scanf("%d", &depth);
    
    // Neue Dimensionen zum Versuch einlesen
    int new_w, new_h, new_d;
    scanf("%d", &new_w);
    scanf("%d", &new_h);
    scanf("%d", &new_d);
    
    // TODO: Erstelle eine Box mit den initialen Dimensionen
    
    
    // TODO: Gib das initiale Volumen im Format aus: "Volume: {volume}"
    
    
    // TODO: Versuche, die neuen Dimensionen zu setzen und speichere das Ergebnis
    
    
    // TODO: Gib aus, ob das Setzen erfolgreich war im Format: "Set: {0 or 1}"
    
    
    // TODO: Gib das resultierende Volumen im Format aus: "Volume: {volume}"
    
    
    // TODO: Zerstöre die Box und gib "Destroyed" aus
    
    
    return 0;
}

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-C-Compiler