Menu
Coddy logo textTech

Implémentation du cercle

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

challenge icon

Défi

Facile

Continuons la construction du projet Shape Drawer en implémentant le Circle — une forme concrète qui intègre la structure de base Shape et fournit sa propre logique de dessin et de calcul d'aire.

En vous appuyant sur les bases de la leçon précédente, vous allez étendre votre projet avec ces fichiers :

  • shape.h : Conservez votre interface de base Shape de la leçon précédente avec les types de pointeurs de fonction DrawFunc et AreaFunc.
  • circle.h : Définissez votre structure Circle ici. Un cercle intègre Shape comme son premier membre (permettant la règle du premier membre pour le transtypage ascendant ou upcasting) et ajoute un champ radius de type double. Déclarez une fonction constructeur create_circle qui prend un rayon et retourne un Circle par valeur.
  • circle.c : Implémentez ici le comportement spécifique au cercle :
    • draw_circle — affiche Drawing Circle with radius: X.XX (rayon affiché avec 2 décimales)
    • area_circle — retourne π × radius² (utilisez 3.14159 pour π)
    • create_circle — initialise un Circle, relie les pointeurs de fonction de la structure Shape intégrée pour pointer vers draw_circle et area_circle, définit le rayon et retourne le cercle
  • main.c : Rassemblez le tout. Lisez une valeur de rayon en entrée, créez un cercle à l'aide de votre constructeur, puis appelez à la fois draw et area via les pointeurs de fonction de la structure Shape intégrée. Affichez l'aire avec 2 décimales.

Votre programme recevra une entrée : une valeur de radius (sous forme de nombre à virgule flottante).

Exemple de sortie lorsque l'entrée est 5.0 :

Drawing Circle with radius: 5.00
Area: 78.54

Exemple de sortie lorsque l'entrée est 3.5 :

Drawing Circle with radius: 3.50
Area: 38.48

L'idée clé est que Circle contient une Shape comme premier membre, vous pouvez donc accéder aux pointeurs de fonction via circle.base.draw et circle.base.area (ou quel que soit le nom que vous donnez au membre intégré). Lors de l'appel de ces fonctions, passez un pointeur vers le membre Shape. N'oubliez pas d'utiliser des gardes d'inclusion dans tous les fichiers d'en-tête.

Essayez vous-même

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

int main() {
    double radius;
    scanf("%lf", &radius);
    
    // TODO: Créer un Circle en utilisant create_circle
    
    // TODO: Appeler draw via le pointeur de fonction de la Shape intégrée
    
    // TODO: Appeler area via le pointeur de fonction de la Shape intégrée
    // et afficher avec 2 décimales : "Area: %.2f\n"
    
    return 0;
}

Toutes les leçons de Object Oriented Programming