Récapitulatif : Dispatcher de calculatrice
Fait partie de la section Object Oriented Programming du Journey C de Coddy — leçon 37 sur 61.
Défi
FacileConstruisez une calculatrice en utilisant une table de dispatch (dispatch table). Vous allez créer un tableau de pointeurs de fonction qui associe des codes d'opération à leurs fonctions correspondantes, puis l'utiliser pour effectuer des calculs.
Écrivez un programme qui :
- Crée un
typedefappeléOperationpour un pointeur de fonction qui prend deux paramètresintet retourne unint - Définit quatre fonctions arithmétiques :
add— retourne a + bsub— retourne a - bmul— retourne a * bdivide— retourne a / b (division entière)
- Dans
main, crée une table de dispatch : un tableau de 4 pointeurs de fonctionOperation, où l'indice 0 est add, l'indice 1 est sub, l'indice 2 est mul, et l'indice 3 est divide - Lit trois entrées : deux entiers et un code d'opération (0-3)
- Utilise le code d'opération pour indexer la table de dispatch et appeler la fonction appropriée
- Affiche le résultat
Vous recevrez trois entrées : le premier nombre, le second nombre, et le code d'opération (0 pour add, 1 pour sub, 2 pour mul, 3 pour divide).
Votre sortie doit être un seul entier — le résultat de l'opération :
7Dans cet exemple avec les entrées 10, 3, 1 : le code d'opération 1 sélectionne sub dans la table de dispatch, nous calculons donc 10 - 3 = 7.
La clé ici est d'utiliser l'indexation de tableau pour sélectionner la fonction — aucune instruction if ou switch n'est nécessaire. Votre table de dispatch devrait ressembler à ceci :
Operation ops[4] = {add, sub, mul, divide};Ensuite, appelez la fonction en utilisant : ops[code](a, b)
Essayez vous-même
#include <stdio.h>
// TODO: Créer un typedef appelé 'Operation' pour un pointeur de fonction
// qui prend deux paramètres int et retourne un int
// TODO: Définir les quatre fonctions arithmétiques : add, sub, mul, divide
int main() {
// Lire l'entrée
int a, b, code;
scanf("%d", &a);
scanf("%d", &b);
scanf("%d", &code);
// TODO: Créer la table de dispatch (tableau de 4 pointeurs de fonction Operation)
// Operation ops[4] = { ... };
// TODO: Utiliser le code d'opération pour appeler la fonction appropriée
// et stocker le résultat
int result;
// Afficher le résultat
printf("%d\n", result);
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ète7Pointeurs sur fonctions
Déclaration de pointeurs sur fonctionsAppel de pointeurs sur fonctionsTypedef pour les pointeurs sur fonctionsPassage de fonctions en argumentsRécapitulatif : Dispatcher de calculatrice2Objets 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