Menu
Coddy logo textTech

Riepilogo: scatola segreta

Fa parte della sezione Programmazione orientata agli oggetti del percorso C di Coddy. Lezione 21 di 61.

challenge icon

Sfida

Facile

Costruiamo un modulo Box che dimostri l'incapsulamento completo. La tua scatola avrà tre dimensioni nascoste, larghezza, altezza e profondità, a cui si potrà accedere solo tramite le funzioni che fornisci. Ecco il modello del puntatore opaco in azione!

Creerai tre file:

  • box.h: la tua interfaccia pubblica. Dichiara un tipo opaco Box usando solo una dichiarazione anticipata: il corpo della struct rimane nascosto. Dichiara queste funzioni:
    • create_box: accetta tre interi (larghezza, altezza, profondità) e restituisce un puntatore a Box
    • destroy_box: libera la memoria allocata
    • get_volume: accetta un const Box * e restituisce il volume (larghezza × altezza × profondità)
    • set_dimensions: accetta un puntatore a Box e tre nuovi valori per le dimensioni, restituisce int (1 in caso di successo, 0 se una qualsiasi dimensione è negativa o zero)
    Usa le guardie di inclusione con il simbolo BOX_H.
  • box.c: definisci la struct Box effettiva con tre membri nascosti: int width, int height e int depth. Implementa tutte e quattro le funzioni. Il costruttore deve allocare e inizializzare la scatola. La funzione set_dimensions deve verificare che tutti e tre i valori siano positivi (maggiori di zero) prima di applicare eventuali modifiche; se un qualsiasi valore non supera la verifica, rifiuta l'intero aggiornamento e restituisci 0.
  • main.c: mostra il tuo Box incapsulato creandone uno, controllandone il volume, provando a modificarne le dimensioni (sia con valori validi che non validi) e liberando correttamente la memoria.

Riceverai cinque input: la larghezza iniziale, l'altezza iniziale, la profondità iniziale, seguite da tre nuove dimensioni da provare a impostare (che potrebbero includere valori non validi).

Nel file principale, crea un Box con le dimensioni iniziali e stampa il suo volume. Poi prova a impostare le nuove dimensioni: stampa se l'aggiornamento è riuscito e il volume risultante. Infine, libera la scatola e conferma la pulizia.

Stampa l'output in questo formato:

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

Ad esempio, con gli input 2, 3, 4, 5, 5, 5, l'output sarebbe:

Volume: 24
Set: 1
Volume: 125
Destroyed

Con gli input 2, 3, 4, -1, 5, 5, l'output sarebbe:

Volume: 24
Set: 0
Volume: 24
Destroyed

Nota come la verifica in set_dimensions protegga la tua scatola dagli stati non validi: il codice esterno non può aggirare le tue regole perché le dimensioni sono completamente nascoste dietro la tua interfaccia.

Provalo tu

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

int main() {
    // Leggi le dimensioni iniziali
    int width, height, depth;
    scanf("%d", &width);
    scanf("%d", &height);
    scanf("%d", &depth);
    
    // Leggi le nuove dimensioni da provare
    int new_w, new_h, new_d;
    scanf("%d", &new_w);
    scanf("%d", &new_h);
    scanf("%d", &new_d);
    
    // TODO: Crea un Box con le dimensioni iniziali
    
    
    // TODO: Stampa il volume iniziale nel formato: "Volume: {volume}"
    
    
    // TODO: Prova a impostare le nuove dimensioni e memorizza il risultato
    
    
    // TODO: Stampa se l'impostazione è riuscita nel formato: "Set: {0 or 1}"
    
    
    // TODO: Stampa il volume risultante nel formato: "Volume: {volume}"
    
    
    // TODO: Distruggi il box e stampa "Destroyed"
    
    
    return 0;
}

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore C online