UE : Programmation Orientée Objet (I4AEIL11) - Sujet de TD - INSA ...
←
→
Transcription du contenu de la page
Si votre navigateur ne rend pas la page correctement, lisez s'il vous plaît le contenu de la page ci-dessous
UE : Programmation Orientée Objet (I4AEIL11) Sujet de TD Institut National des Sciences Appliquées de Toulouse P.-E. Hladik, pehladik@insa-toulouse.fr — TD 1 : ma première classe Version bêta (8 mars 2021) Message à caractère informatif : Configuration de Netbeans Afin de vous faciliter l’édition et la compilation du code, nous allons utiliser l’IDE (integrated development environment) Netbeans. Pour lancer Pour écrire du code en C/C++ et le compiler avec Netbeans 11, il faut activer un pluging sur votre compte. Suivez les étapes suivantes : — Aller dans le menu Tools > Plugins > Settings — Activer les options en cochant "Netbeans 8.2 plugins Portal" — Aller dans Available et rafraichir (Check for newest) — Choisir C/C++ et valider les étapes 1 Un premier projet en C++ Objectif 1.1 — faire un projet C++, — afficher un texte. (1.1) Travail à faire : Hello world 1. Commencez par lancer Netbeans et créer un projet C/C++ de type C/C++ Ap- plication avec le nom que vous voulez (mais quelque chose de reconnaissable est souhaitable), 2. attention lors de la création du projet cochez bien Create Main File et choisissez son type comme étant C++ 14, 3. regardez le fichier main.cpp dans Sources Files, 4. ajoutez du code pour afficher le message Bonjour le monde ! avec un saut de ligne et sans utiliser printf,
Programmation Orientée Objet & Temps réel (I4AEIL11) 2 5. compilez, exécutez, observez, 6. Supprimer la ligne using namespace std; du fichier main et refaite la même chose. (1.1) Comment faire : Les espaces de noms Attention toutes les bibliothèques standard font parties de l’espace de noms std. Pour pouvoir y faire référence vous devez : — soit en précédent l’appel à la function par std::, par exemple std::printf("toto"), — soit en ajoutant l’expression using namespace std; en début de fichier. (1.2) Comment faire : Affichez une chaîne de caractères Utilisez les ressources du C++ avec la gestion des flux standards. Pour cela vous aurez besoin des bibliothèques standards iostream (espace de noms std). La sortie est faite sur std::cout, on utilise l’opérateur
Programmation Orientée Objet & Temps réel (I4AEIL11) 3 6. ajouter un destructeur dans lequel vous afficherez simplement un message RIP [prenom] [nom]., 7. ajouter dans le main la déclaration d’une instance de personnage, 8. compilez, exécutez, observez et expliquez ce qui se passe. (2.1) Comment faire : Déclaration d’une classe Une classe est décrite en C++ par : class MaClasse { ... }; (2.1) Bonne pratique : string Le C++ offre une classe d’objet string (documentation) dans la bibliothèque standard pour gérer les chaînes de caractères. Avec cette classe il est possible par exemple de concaténer deux chaînes avec l’opérateur + ou de convertir une valeur en chaîne de caractère avec la méthode to_string, par exemple : int a = 1; cout
Programmation Orientée Objet & Temps réel (I4AEIL11) 4 MaClasse (); // constructeur }; (2.4) Comment faire : Implémenter une méthode L’implémentation d’une méthode se fait dans le fichier .cpp en incluant la déclaration de la classe et avec la syntaxe suivante : #include "MaClasse.h" MaClasse::toto (){ ... // code de la méthode } (2.5) Comment faire : Déclarer un destructeur Toute classe a par défaut un destructeur, si on veut l’implémenter il faut déclarer une fonction dont le prototype est uniquement le nom de la classe précédé d’un , par exemple class MaClasse{ ~MaClasse (); // destructeur }; (2.3) Bonne pratique : remettre en forme son code Usez et abusez de la fonctionnalité Source->Format de Netbeans pour remettre en forme votre code. 3 Surcharge de constructeur Objectif 3.1 — surcharger un constructeur, — utiliser new et delete. (3.1) Travail à faire : Surcharger le constructeur pour ajouter un nom 1. Ajoutez un nouveau constructeur à la classe personnage qui prend comme para- mètres string prenom et string nom et int age avec comme valeur 20 par défaut pour ce dernier. Le constructeur doit allouer ces valeurs aux attributs lors de la construction. 2. utiliser ce constructeur en déclarant une variable dans le main avec des nouvelles valeurs, 3. compilez, exécutez, observez. 4. remplacer l’instanciation de l’objet par un appel explicite à new INSA Toulouse – 8 mars 2021
Programmation Orientée Objet & Temps réel (I4AEIL11) 5 5. compilez, exécutez, observez. 6. utiliser delete en fin de programme, 7. compilez, exécutez, observez. (3.1) Comment faire : valeur par défaut En C++ il est possible de mettre des valeurs par défaut aux arguments d’une fonction dans sa déclaration (pas son implémentation), par exemple int f(int a, int b = 10, float c = 2.0); permet d’écrire f(0) qui est équivalent à f(0, 10, 2.0) ou f(0, 8) qui est équivalent à f(0, 8, 2.0). Attention il n’est pas possible de laisser de "trou", par exemple f(0,3.0) n’est pas correct car le second argument doit être un entier. (3.2) Comment faire : surcharger un constructeur Il est possible de surcharger un constructeur (mais aussi de manière plus générale une fonction) en déclarant ce constructeur avec des paramètres différents (le compilateur s’en sort tout seul lors de l’appel), par exemple class MaClasse{ public: MaClasse (); MaClasse (string a); void toto (int a); void toto (int a, double b); }; (3.3) Comment faire : utiliser un constructeur avec des paramètres Pour appeler un constructeur avec des paramètres, il suffit de passer ces paramètres lors de l’instanciation, par exemple : MaClasse toto (10); MaClasse * toto = new MaClasse (10); (3.4) Comment faire : Construction et desctruction avec new et delete La création d’un objet avec new se fait par un appel MaClasse *toto = new MaClasse (); et sa destruction par delete toto;. INSA Toulouse – 8 mars 2021
Programmation Orientée Objet & Temps réel (I4AEIL11) 6 4 Enumerations Objectif 4.1 — déclarer une énumération. (4.1) Travail à faire : La première classe ersonnage.h qui prend pour valeur 1. créer une énumération genre dans le fichier p masculin ou feminin , 2. Ajoutez à la classe personnage un nouvelle attribut _genre de type genre, 3. modifiez les constructeur pour prendre en compte ce nouvel attribut, 4. mettez à jour le message du constructeur pour gérer l’accord de né en fonction du genre (et on ne fait pas d’écriture inclusive). (4.1) Comment faire : énumération Une énumération est une classe particulière qui prend une liste de valeur, elle se dé- clare en C++ par : enum NomEnum {liste de valeurs}, par exemple enum Toto {valeur1, valeur2} déclare l’énumération Toto avec les valeurs valeur1 et valeur2. On peut ensuite déclare une variable du type de l’énumération qui ne pourra prendre qu’une valeur parmi celles déclarées, par exemple : Toto var = valeur1. 5 Implémenter une méthode Objectif 5.1 — déclarer une méthode, — implémenter un méthode. (5.1) Travail à faire : Ajout d’une méthode 1. ajouter une méthode public string identite() qui retourne la chaîne de caractère Salut, je m’appelle [prénom] [nom] et j’ai [age courant]. 2. utiliser la méthode identite depuis le main. 6 Les accesseurs et mutateurs Objectif 6.1 INSA Toulouse – 8 mars 2021
Programmation Orientée Objet & Temps réel (I4AEIL11) 7 — créer des accesseurs efficaces, — créer des mutateurs. (6.1) Travail à faire : Ajout d’acesseurs et de mutateurs 1. ajoutez une méthode int age_courant () qui retourne l’age courant d’un objet de type personnage, 2. ajoutez une méthode set_age_courant(int age) qui permet de mettre à jour la valeur de age_courant, 3. utilisez ces méthodes depuis le main. (6.1) Bonne pratique : accesseur Un accesseur retourne des valeurs des attributs, il est donc préférable de préciser que la méthode ne modifie pas les données par l’utilisation de const, par exemple : class MaClasse{ private: int _att1; public: int att1 () const ; }; int MaClasse::att1 () const { return _att1; } (6.2) Bonne pratique : création automatique Vous en avez marre d’écrire du code, demandez à Netbeans de la faire à votre place... Pour les accesseurs et mutateurs, vous pouvez aller dans Source->Insert Code, choisir ensuite getter and setter puis cocher les attributs pour lesquels vous voulez générer les méthodes. INSA Toulouse – 8 mars 2021
Vous pouvez aussi lire