Chapitre 3 • polymorphisme, enums, templates
Cartouche
| Champ | Valeur |
|---|---|
| Auteur·e | Élise |
| Édition | 2023-09-15 |
| Durée | une journée |
| Taille des équipes | 1 personne |
| Rendu | via git, dépôt 2023_cpp_c3, droits en lecture à delivery_collector |
Barème
| Critère | Points |
|---|---|
| Hello stranger | 3 |
| Hola senora | 3 |
| add up and print | 4 |
| min/max | 3 |
| coordonnées templates | 3 |
| Hola senora maps and lambdas | 4 |
| Total des critères | 20 |
| Note maximale | 20 |
| Fautes de norme | -0,5 par faute |
Règlement
La réalisation de cet exercice est assujettie aux règles en vigueur dans l’école en matière de triche et de normalisation. Tricher vous expose à de graves sanctions.
Vous devez être seul·e auteur·e de votre rendu mais vous êtes autorisés et encouragés à communiquer dans le cadre de ce sujet.
Dépôt de référence et norme
Dépôt de référence avec règles clang format.
Tâches
Hello, stranger?
Fichier à rendre : task00/hello.{cpp,hpp}, task00/main.cpp
Consigne
Écrivez une fonction hello qui peut prendre :
- soit une chaîne de caractères en premier paramètre ;
- soit aucun paramètres.
S’il y a un paramètre, votre fonction doit écrire sur la sortie standard "Hello " suivi par le paramètre, un point d’exclamation et un retour à la ligne.
S’il n’y a pas de paramètre, vous devez écrire “Hello stranger!” suivi d’un retour à la ligne.
Exemple
hello();
// prints Hello stranger!
hello("toto");
// prints Hello toto!
¿Hola, señora?
Fichier à rendre : task01/Language.hpp, task01/hello.{cpp,hpp}, task01/main.cpp
Consignes
Copiez votre ou vos fonctions hello et ajoutez la possibilité de préciser une langue.
Si aucune langue n’est précisée, affichez le message en anglais.
En fonction de la langue passée en paramètre, vous devez adapter le message :
Language::Spanish- “¡Hola toto!” (avec nom en paramètre)
- “¡Hola extranjero!” (sans nom en paramètre)
Language::French- “Bonjour toto !”
- “Bonjour inconnu !”
Language::English- “Hello toto!”
- “Hello stranger!”
Exemple
hello(Language::Spanish);
// ¡Hola extranjero!
hello("toto");
// Hello toto!
hello("toto", Language::French);
// Bonjour toto !
Add up and print
Fichiers à rendre : task02/add_and_print.hpp, task02/main.cpp
Écrivez une fonction template add_and_print qui prends deux paramètre, les ajoute ensemble, affiche le résultat sur la sortie standard et renvoie le résultat.
Les deux paramètres ne sont pas nécessairement du même type, du moment qu’ils sont additionnables.
Min/Max
Fichiers à rendre : task03/min.hpp, task03/max.hpp, task03/main.cpp
Écrivez une fonction template max qui prend deux paramètres et renvoie le plus grand des deux en utilisant les opérateurs de comparaison.
Écrivez une fonction template min qui prend deux paramètres et renvoie le plus petit des deux en utilisant les opérateurs de comparaison.
Si les deux paramètres sont égaux, renvoyez le premier.
Les fonctions doivent pouvoir fonctionner avec des paramètres de n’importe quel type, dès lors qu’ils peuvent être comparés avec les opérateurs de comparaison.
Coordonnées templates
Fichiers à rendre : task04/{pos.hpp,main.cpp}
Écrivez deux structures template :
pos_2dpos_3d
Elles doivent permettre à leurs utilisateurs de choisir quel type utiliser pour leur champs.
Enfin, surchargez l’opérateur << pour permettre l’affichage de ses structures (dès lors que leur type est affichable).
Prototype d’une surcharge de l’opérateur << pour pos_2d :
template<typename T>
std::ostream &operator<<(std::ostream &os, const pos_2d<T> &rhs);
pos_2d<int> position;
position.x = 12;
position.y = 89;
std::cout << position << "\n";
pos_3d<float> rotation;
rotation.x = 0.145;
rotation.y = 45.2;
rotation.z = 78.1;
std::cout << rotation << "\n";
¿Hola, señora? maps and lambdas
Fichier à rendre : task05/Language.hpp, task05/hello.{cpp,hpp}, task01/main.cpp
Comme l’exercice ¿Hola, señora? mais vous n’avez pas le droit à un seul if. Vous devez utiliser std::unordered_map pour stocker des pointeurs sur fonctions.