Récapitulatif : Greeter
Fait partie de la section Programmation Orientée Objet du Journey C de Coddy. Leçon 43 sur 61.
Défi
FacileConstruisons un système Greeter qui démontre le polymorphisme grâce aux pointeurs de fonction : le même type de structure produit des sorties différentes selon la fonction de salutation qui lui est associée.
Tu organiseras ton code sur trois fichiers :
greeter.h: définis ici ton interface de salutation. Crée un type de pointeur de fonction appeléGreetFuncqui prend unconst char*(un nom à saluer) et ne renvoie rien. Définis ensuite une structureGreetercontenant unlanguage(unconst char*) et un pointeur de fonctiongreetde typeGreetFunc.greeter.c: implémente les fonctions de salutation qui représentent différentes langues :greet_english: afficheHello, name!greet_spanish: afficheHola, name!
main.c: rassemble tout ici. Crée deux instances deGreeter, une pour l’anglais et une pour l’espagnol, chacune associée à sa fonction de salutation respective. Lis un nom en entrée, puis appelle la fonctiongreetsur les deux salutateurs afin de démontrer un comportement polymorphe.
Ton programme recevra une seule entrée : un nom à saluer.
Crée un salutateur anglais avec la valeur English pour language et un salutateur espagnol avec la valeur Spanish pour language. Pour chaque salutateur, affiche sa langue suivie de deux-points et d’une espace, puis appelle sa fonction greet avec le nom fourni en entrée.
Exemple de sortie lorsque l’entrée est Maria :
English: Hello, Maria!
Spanish: Hola, Maria!Exemple de sortie lorsque l’entrée est Carlos :
English: Hello, Carlos!
Spanish: Hola, Carlos!Les deux salutateurs sont du même type Greeter, et produisent pourtant des salutations différentes, car chacun possède une fonction différente affectée à son membre greet. N’oublie pas d’utiliser des gardes d’inclusion dans ton fichier d’en-tête.
Essayez vous-même
#include <stdio.h>
#include <string.h>
#include "greeter.h"
int main() {
// Lire l'entrée du nom
char name[100];
scanf("%s", name);
// TODO: Créer un greeter anglais
// - Définir language à "English"
// - Définir greet à la fonction greet_english
// TODO: Créer un greeter espagnol
// - Définir language à "Spanish"
// - Définir greet à la fonction greet_spanish
// TODO: Pour chaque greeter :
// 1. Afficher le language suivi de ": "
// 2. Appeler la fonction greet avec le name
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