Implémentation du rectangle
Fait partie de la section Object Oriented Programming du Journey C de Coddy — leçon 46 sur 61.
Défi
FacileContinuons la construction du projet Shape Drawer en implémentant le Rectangle — une autre forme concrète qui intègre la structure de base Shape, tout comme nous l'avons fait avec Circle.
En vous appuyant sur votre projet existant, vous ajouterez la fonctionnalité rectangle dans ces fichiers :
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 retourne 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 affichées avec 2 décimales)area_rectangle— retourne width × heightcreate_rectangle— initialise unRectangle, relie les pointeurs de fonction de laShapeintégrée aux fonctions du rectangle, définit les dimensions et retourne le rectangle
main.c: Démontrez le fonctionnement des deux formes à travers la même interface. Lisez deux entrées : width et height pour un rectangle. Créez un rectangle à l'aide de votre constructeur, puis appelez à la foisdrawetareavia les pointeurs de fonction de laShapeintégrée. 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.75Tout comme pour Circle, le Rectangle intègre Shape comme son premier membre, vous permettant d'accéder aux pointeurs de fonction via le membre intégré. Ce modèle cohérent est ce qui 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 intégrée
// TODO: Appeler area via le pointeur de fonction de la Shape intégrée
// TODO: Afficher l'aire 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