Menu
Coddy logo textTech

Rückblick: Die geheime Box

Teil des Abschnitts Object Oriented Programming der C-Journey von Coddy — Lektion 21 von 61.

challenge icon

Aufgabe

Einfach

Lassen Sie uns ein Box-Modul bauen, das vollständige Kapselung demonstriert. Ihre Box wird drei verborgene Dimensionen haben – Breite, Höhe und Tiefe –, auf die nur über die von Ihnen bereitgestellten Funktionen zugegriffen werden kann. Dies ist das vollständige Opaque-Pointer-Pattern in Aktion!

Sie werden drei Dateien erstellen:

  • box.h: Ihre öffentliche Schnittstelle. Deklarieren Sie einen opaken Box-Typ nur mit einer Vorwärtsdeklaration – der Rumpf des Structs bleibt verborgen. Deklarieren Sie diese Funktionen:
    • create_box — nimmt drei Ganzzahlen (Breite, Höhe, Tiefe) entgegen und gibt einen Box-Pointer zurück
    • destroy_box — gibt den zugewiesenen Speicher frei
    • get_volume — nimmt einen const Box * entgegen und gibt das Volumen zurück (Breite × Höhe × Tiefe)
    • set_dimensions — nimmt einen Box-Pointer und drei neue Dimensionswerte entgegen, gibt int zurück (1 für Erfolg, 0 wenn eine Dimension negativ oder Null ist)
    Verwenden Sie Include-Guards mit dem Symbol BOX_H.
  • box.c: Definieren Sie das eigentliche struct Box mit drei verborgenen Elementen: int width, int height und int depth. Implementieren Sie alle vier Funktionen. Ihr Konstruktor sollte die Box allokieren und initialisieren. Die Funktion set_dimensions muss validieren, dass alle drei Werte positiv (größer als Null) sind, bevor Änderungen angewendet werden – wenn ein Wert die Validierung nicht besteht, lehnen Sie die gesamte Aktualisierung ab und geben Sie 0 zurück.
  • main.c: Demonstrieren Sie Ihre gekapselte Box, indem Sie eine erstellen, ihr Volumen überprüfen, Dimensionsänderungen versuchen (sowohl gültige als auch ungültige) und ordnungsgemäß aufräumen.

Sie erhalten fünf Eingaben: die anfängliche Breite, anfängliche Höhe, anfängliche Tiefe, gefolgt von drei neuen Dimensionen, die gesetzt werden sollen (welche ungültige Werte enthalten können).

Erstellen Sie in Ihrer Hauptdatei eine Box mit den Anfangsdimensionen und geben Sie deren Volumen aus. Versuchen Sie dann, die neuen Dimensionen zu setzen – geben Sie aus, ob die Aktualisierung erfolgreich war und das resultierende Volumen. Geben Sie schließlich die Box frei und bestätigen Sie die Bereinigung.

Geben Sie die Ausgabe in diesem Format aus:

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

Zum Beispiel wäre bei den Eingaben 2, 3, 4, 5, 5, 5 die Ausgabe:

Volume: 24
Set: 1
Volume: 125
Destroyed

Bei den Eingaben 2, 3, 4, -1, 5, 5 wäre die Ausgabe:

Volume: 24
Set: 0
Volume: 24
Destroyed

Beachten Sie, wie die Validierung in set_dimensions Ihre Box vor ungültigen Zuständen schützt – externer Code kann Ihre Regeln nicht umgehen, da die Dimensionen vollständig hinter Ihrer Schnittstelle verborgen sind.

Probier es selbst

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

int main() {
    // Ursprüngliche Dimensionen einlesen
    int width, height, depth;
    scanf("%d", &width);
    scanf("%d", &height);
    scanf("%d", &depth);
    
    // Neue zu versuchende Dimensionen einlesen
    int new_w, new_h, new_d;
    scanf("%d", &new_w);
    scanf("%d", &new_h);
    scanf("%d", &new_d);
    
    // TODO: Eine Box mit den ursprünglichen Dimensionen erstellen
    
    
    // TODO: Ursprüngliches Volumen im Format "Volume: {volume}" ausgeben
    
    
    // TODO: Versuchen, neue Dimensionen zu setzen und das Ergebnis speichern
    
    
    // TODO: Ausgeben, ob das Setzen erfolgreich war, im Format "Set: {0 or 1}"
    
    
    // TODO: Das resultierende Volumen im Format "Volume: {volume}" ausgeben
    
    
    // TODO: Die Box zerstören und "Destroyed" ausgeben
    
    
    return 0;
}

Alle Lektionen in Object Oriented Programming