Menu
Coddy logo textTech

Implémentation du cercle

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

challenge icon

Défi

Facile

Continuons à construire le 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 nous appuyant sur les fondations 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 (ce qui permet la règle du premier membre pour la conversion ascendante) et ajoute un champ radius de type double. Déclarez une fonction constructeur create_circle qui prend un rayon et renvoie un Circle par valeur.
  • circle.c : Implémentez ici le comportement spécifique au cercle :
    • draw_circle : affiche Drawing Circle with radius: X.XX (le rayon est affiché avec 2 décimales)
    • area_circle : renvoie π × rayon² (utilisez 3.14159 pour π)
    • create_circle : initialise un Circle, configure les pointeurs de fonction du Shape intégré pour qu’ils pointent vers draw_circle et area_circle, définit le rayon et renvoie le cercle
  • main.c : Assemblez tous les éléments. 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 du Shape intégré. Affichez l’aire avec 2 décimales.

Votre programme recevra une entrée : une valeur de rayon (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 essentielle est que Circle contient un Shape comme premier membre. Vous pouvez donc accéder aux pointeurs de fonction via circle.base.draw et circle.base.area (ou le nom que vous donnez au membre intégré). Lorsque vous appelez ces fonctions, transmettez 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 embarquée
    
    // TODO: Appeler area via le pointeur de fonction de la Shape embarquée
    // et afficher avec 2 décimales : "Area: %.2f\n"
    
    return 0;
}

Toutes les leçons de Programmation Orientée Objet

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