Implémentation du rectangle
Fait partie de la section Programmation Orientée Objet du Journey C de Coddy. Leçon 46 sur 61.
Défi
FacileContinuons à construire le projet Shape Drawer en implémentant Rectangle : une autre forme concrète qui intègre la structure de base Shape, comme nous l’avons fait avec Circle.
En vous appuyant sur votre projet existant, vous allez ajouter les fonctionnalités du rectangle dans les fichiers suivants :
shape.h: conservez votre interface de baseShapeavec les types de pointeurs de fonctionDrawFuncetAreaFuncdes leçons précédentes.circle.hetcircle.c: conservez votre implémentation de Circle de la leçon précédente.rectangle.h: définissez votre structureRectangleici. Un rectangle intègreShapecomme son premier membre et ajoute les champswidthetheight(tous deux de typedouble). Déclarez une fonction constructeurcreate_rectanglequi prend les paramètres width et height et renvoie unRectanglepar valeur.rectangle.c: implémentez le comportement spécifique au rectangle :draw_rectangle: afficheDrawing Rectangle with width: X.XX and height: X.XX(les deux valeurs étant affichées avec 2 décimales)area_rectangle: renvoie width × heightcreate_rectangle: initialise unRectangle, relie les pointeurs de fonction deShapeintégré aux fonctions du rectangle, définit les dimensions et renvoie le rectangle
main.c: démontrez que les deux formes fonctionnent avec la même interface. Lisez deux entrées : la largeur et la hauteur d’un rectangle. Créez un rectangle à l’aide de votre constructeur, puis appelez à la foisdrawetareavia les pointeurs de fonction deShapeintégré. Affichez l’aire avec 2 décimales.
Votre programme recevra deux entrées : les valeurs width et height (sous forme de nombres à virgule flottante).
Exemple de sortie lorsque les entrées sont 4.0 et 3.0 :
Drawing Rectangle with width: 4.00 and height: 3.00
Area: 12.00Exemple de sortie lorsque les entrées sont 7.5 et 2.5 :
Drawing Rectangle with width: 7.50 and height: 2.50
Area: 18.75Comme avec Circle, le Rectangle intègre Shape comme son premier membre, ce qui vous permet d’accéder aux pointeurs de fonction via le membre intégré. Ce modèle cohérent permet le polymorphisme : les deux formes peuvent être traitées uniformément via leur interface 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 "rectangle.h"
int main() {
double width, height;
scanf("%lf", &width);
scanf("%lf", &height);
// TODO: Créer un rectangle en utilisant create_rectangle(width, height)
// 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
// TODO: Afficher l'aire avec 2 décimales : "Area: %.2f\n"
return 0;
}Toutes les leçons de Programmation Orientée Objet
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 cercleImplémentation du rectangleUtilisation polymorpheConteneur de formesEntraînez-vous par vous-même : Compilateur C en ligne