Menu
Coddy logo textTech

Récapitulatif : Hiérarchie des formes

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

challenge icon

Défi

Facile

Construisons une hiérarchie complète de formes qui démontre la puissance de l’héritage par composition. Vous allez créer un type de base Shape dont toute forme spécifique pourra hériter, puis créer un Rect qui l’étend.

Vous organiserez votre code sur trois fichiers :

  • shape.h : définissez votre hiérarchie de structures avec des gardes d’inclusion. Créez une structure Shape avec un seul champ color (un entier). Définissez ensuite une structure Rect qui intègre Shape comme premier membre et ajoute les champs width et height (tous deux des entiers). Déclarez deux fonctions : set_color, qui prend un Shape* et une nouvelle valeur de couleur, et print_rect, qui prend un Rect*.
  • shape.c : implémentez les deux fonctions. Votre fonction set_color fonctionne avec le type de base. Elle modifie la couleur de toute forme. Votre fonction print_rect affiche toutes les informations du rectangle, y compris sa couleur héritée.
  • main.c : créez un Rect et initialisez tous ses champs. Démontrez ensuite la conversion ascendante en appelant set_color avec votre rectangle converti en Shape*. Enfin, affichez le rectangle pour vérifier que la couleur a été modifiée via le pointeur vers le type de base.

Vous recevrez quatre entrées : la largeur du rectangle, sa hauteur, une couleur initiale et une nouvelle couleur à définir via la fonction générique.

Dans votre fichier principal, créez le rectangle avec les valeurs initiales, puis utilisez set_color pour modifier sa couleur et lui attribuer la nouvelle valeur (n’oubliez pas de convertir votre Rect* en Shape*), et appelez enfin print_rect pour afficher le résultat.

Votre sortie devrait ressembler à ceci :

Width: 10
Height: 5
Color: 7

10 est la largeur, 5 est la hauteur et 7 est la couleur mise à jour (et non la couleur initiale). L’idée essentielle est que set_color ne sait rien des rectangles. Elle fonctionne uniquement avec Shape. Pourtant, grâce à la règle du premier membre et à la conversion ascendante, la couleur de votre rectangle est modifiée par l’intermédiaire de cette fonction générique.

Essayez vous-même

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

int main() {
    int width, height, initial_color, new_color;
    scanf("%d", &width);
    scanf("%d", &height);
    scanf("%d", &initial_color);
    scanf("%d", &new_color);
    
    // TODO: Créer un Rect et initialiser tous ses champs
    // (width, height, et la couleur du Shape embarqué avec initial_color)
    
    // TODO: Appeler set_color avec le rectangle casté en Shape*
    // pour changer la couleur en new_color
    
    // TODO: Appeler print_rect pour afficher le résultat
    
    return 0;
}

Toutes les leçons de Programmation Orientée Objet

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