Menu
Coddy logo textTech

Récapitulatif : La boîte secrète

Fait partie de la section Programmation Orientée Objet du Journey C de Coddy. Leçon 21 sur 61.

challenge icon

Défi

Facile

Construisons un module Box qui démontre un encapsulation complète. Votre boîte aura trois dimensions cachées, width, height et depth, qui ne pourront être accessibles qu’au moyen des fonctions que vous fournissez. Voici le modèle complet du pointeur opaque en action !

Vous allez créer trois fichiers :

  • box.h : votre interface publique. Déclarez un type Box opaque en utilisant uniquement une déclaration anticipée : le corps de la structure reste caché. Déclarez ces fonctions :
    • create_box : prend trois entiers (width, height, depth) et renvoie un pointeur vers une Box
    • destroy_box : libère la mémoire allouée
    • get_volume : prend un const Box * et renvoie le volume (width × height × depth)
    • set_dimensions : prend un pointeur vers une Box et trois nouvelles valeurs de dimension, et renvoie int (1 en cas de réussite, 0 si une dimension est négative ou nulle)
    Utilisez des gardes d’inclusion avec le symbole BOX_H.
  • box.c : définissez la struct Box réelle avec trois membres cachés : int width, int height et int depth. Implémentez les quatre fonctions. Votre constructeur doit allouer et initialiser la boîte. La fonction set_dimensions doit vérifier que les trois valeurs sont positives (supérieures à zéro) avant d’appliquer les modifications ; si une valeur échoue à la validation, refusez la mise à jour entière et renvoyez 0.
  • main.c : démontrez votre Box encapsulée en en créant une, en vérifiant son volume, en tentant de modifier ses dimensions (avec des valeurs valides et invalides), puis en effectuant correctement le nettoyage.

Vous recevrez cinq entrées : la largeur initiale, la hauteur initiale, la profondeur initiale, suivies de trois nouvelles dimensions à définir (qui peuvent inclure des valeurs invalides).

Dans votre fichier principal, créez une Box avec les dimensions initiales et affichez son volume. Tentez ensuite de définir les nouvelles dimensions : affichez si la mise à jour a réussi ainsi que le volume obtenu. Enfin, libérez la boîte et confirmez le nettoyage.

Affichez la sortie dans ce format :

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

Par exemple, avec les entrées 2, 3, 4, 5, 5, 5, la sortie serait :

Volume: 24
Set: 1
Volume: 125
Destroyed

Avec les entrées 2, 3, 4, -1, 5, 5, la sortie serait :

Volume: 24
Set: 0
Volume: 24
Destroyed

Remarquez comment la validation dans set_dimensions protège votre boîte contre les états invalides : le code externe ne peut pas contourner vos règles, car les dimensions sont complètement cachées derrière votre interface.

Essayez vous-même

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

int main() {
    // Lire les dimensions initiales
    int width, height, depth;
    scanf("%d", &width);
    scanf("%d", &height);
    scanf("%d", &depth);
    
    // Lire les nouvelles dimensions à essayer
    int new_w, new_h, new_d;
    scanf("%d", &new_w);
    scanf("%d", &new_h);
    scanf("%d", &new_d);
    
    // TODO: Créer une Box avec les dimensions initiales
    
    
    // TODO: Afficher le volume initial au format : "Volume: {volume}"
    
    
    // TODO: Tenter de définir les nouvelles dimensions et stocker le résultat
    
    
    // TODO: Afficher si la définition a réussi au format : "Set: {0 or 1}"
    
    
    // TODO: Afficher le volume résultant au format : "Volume: {volume}"
    
    
    // TODO: Détruire la box et afficher "Destroyed"
    
    
    return 0;
}

Toutes les leçons de Programmation Orientée Objet

Entraînez-vous par vous-même : Compilateur C en ligne