Implémentation du cercle
Fait partie de la section Object Oriented Programming du Journey C de Coddy — leçon 45 sur 61.
Défi
FacileContinuons 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 baseShapede la leçon précédente avec les types de pointeurs de fonctionDrawFuncetAreaFunc.circle.h: Définissez votre structureCircleici. Un cercle intègreShapecomme son premier membre (permettant la règle du premier membre pour le transtypage ascendant ou upcasting) et ajoute un champradiusde typedouble. Déclarez une fonction constructeurcreate_circlequi prend un rayon et retourne unCirclepar valeur.circle.c: Implémentez ici le comportement spécifique au cercle :draw_circle— afficheDrawing Circle with radius: X.XX(rayon affiché avec 2 décimales)area_circle— retourne π × radius² (utilisez3.14159pour π)create_circle— initialise unCircle, relie les pointeurs de fonction de la structureShapeintégrée pour pointer versdraw_circleetarea_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 foisdrawetareavia les pointeurs de fonction de la structureShapeinté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.54Exemple de sortie lorsque l'entrée est 3.5 :
Drawing Circle with radius: 3.50
Area: 38.48L'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
1Bases de la programmation modulaire
Fichiers d'en-têteGardes d'inclusionFichiers sourcesFonctions statiquesRécapitulatif : Calculatrice modulaire4Encapsulation
Concept des pointeurs opaquesDéfinir des structures opaquesGetters et settersValidation dans les settersRécapitulatif : La boîte secrète2Objets et méthodes
Structs comme objetsLe pointeur 'Self'Rigueur du mot-clé constPointeur vs ValeurMéthodes utilitairesRécapitulatif : Point Manager5Projet : Compte bancaire simple
Configuration du projetImplémentation du compte8Polymorphisme
Pointeurs de fonctions dans les structuresSimulation de méthodesLe concept d'interfaceImplémentation d'interfacesItération polymorphiqueRécapitulatif : Greeter11Patrons de conception en C
Patron SingletonPatron FabriquePatron ItérateurRécapitulatif : Logger Factory3Cycle de vie des objets
Pattern de constructeurPattern de destructeurInitialisation sur la pileCopie profondeRécapitulatif : String Wrapper6Héritage par composition
Imbrication de structLa règle du premier membreAccès aux membres parentsUpcastingRécapitulatif : Hiérarchie des formes9Projet : Dessinateur de formes
Aperçu du projetImplémentation du cercle