Menu
Coddy logo textTech

Récapitulatif : Hiérarchie des formes

Fait partie de la section Object Oriented Programming du Journey C de Coddy — leçon 32 sur 61.

challenge icon

Défi

Facile

Construisons une hiérarchie de formes complète qui démontre la puissance de l'héritage via la composition. Vous allez créer un type de base Shape dont n'importe quelle forme spécifique peut hériter, puis construire 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 imbrique 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 travaille avec le type de base — elle modifie la couleur de n'importe quelle 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 le transtypage ascendant (upcasting) 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 du type de base.

Vous recevrez quatre entrées : la largeur (width) du rectangle, sa hauteur (height), une couleur initiale (initial color), et une nouvelle couleur (new color) à 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 changer sa couleur par la nouvelle valeur (n'oubliez pas de transtyper votre Rect* en Shape*), et enfin appelez 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 (pas la couleur initiale). L'idée clé ici est que set_color ne connaît rien aux rectangles — elle ne travaille qu'avec Shape. Pourtant, grâce à la règle du premier membre et au transtypage, la couleur de votre rectangle est modifiée via 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 de la Shape intégrée 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 Object Oriented Programming