Récapitulatif : Greeter
Fait partie de la section Object Oriented Programming du Journey C de Coddy — leçon 43 sur 61.
Défi
FacileConstruisons un système Greeter qui démontre le polymorphisme à travers les pointeurs de fonction — le même type de structure produisant des sorties différentes selon la fonction de salutation qui lui est associée.
Vous organiserez votre code sur trois fichiers :
greeter.h: Définissez votre interface de salutation ici. Créez un type de pointeur de fonction appeléGreetFuncqui prend unconst char*(un nom à saluer) et ne retourne rien. Définissez ensuite une structureGreetercontenant unlanguage(unconst char*) et un pointeur de fonctiongreetde typeGreetFunc.greeter.c: Implémentez les fonctions de salutation qui représentent différentes langues :greet_english— afficheHello, name!greet_spanish— afficheHola, name!
main.c: Rassemblez tout ici. Créez deux instances deGreeter— une pour l'anglais et une pour l'espagnol — chacune reliée à sa fonction de salutation respective. Lisez un nom en entrée, puis appelez la fonctiongreetsur les deux greeters pour démontrer le comportement polymorphe.
Votre programme recevra une seule entrée : un nom à saluer.
Créez un greeter anglais avec le langage défini sur English et un greeter espagnol avec le langage défini sur Spanish. Pour chaque greeter, affichez sa langue suivie d'un deux-points et d'un espace, puis appelez sa fonction greet avec le nom saisi.
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 greeters sont du même type Greeter, pourtant ils produisent des salutations différentes car chacun possède une fonction différente assignée à son membre greet. N'oubliez pas d'utiliser des gardes d'inclusion dans votre fichier d'en-tête.
Essayez vous-même
#include <stdio.h>
#include <string.h>
#include "greeter.h"
int main() {
// Lire le nom saisi
char name[100];
scanf("%s", name);
// TODO: Créer un greeter anglais
// - Définir language à "English"
// - Définir greet sur la fonction greet_english
// TODO: Créer un greeter espagnol
// - Définir language à "Spanish"
// - Définir greet sur la fonction greet_spanish
// TODO: Pour chaque greeter :
// 1. Afficher la langue suivie de ": "
// 2. Appeler la fonction greet avec le name
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