Notions Complémentaires Flux Entrées-sortiessorties Fichiers Gestion des Exceptions SmartPointer F. Cloppet POO Avancée M1 C++ 271
Généralités Flux = séquence d octets (byte) Flux s écoulent des périphériques vers la mémoire pour les processus d entrées Clavier, souris, disque dur de la mémoire vers les périphériques p pour la sortie Écran, disque dur, imprimante Terminologie en anglais input / output stream Fichier d en-tête en C++ pour les entrées sorties <iostream> F. Cloppet POO Avancée M1 C++ 272
Entrée standard au clavier cin Quand on inclue <iostream>, un objet cin de type istream est automatiquement déclaré istream cin; Sortie standard à l écran cout Quand on inclue <iostream>, un objet cout de type ostream est automatiquement déclaré ostream cout; Le flux suit la direction des chevrons >> ou << F. Cloppet POO Avancée M1 C++ 273
Entrées-Sorties Standard F. Cloppet POO Avancée M1 C++ 274
Formatage Utilisation du fichier d en-tête iomanip Les formatages sont gardés en mémoire jusqu à ce qu'une autre option change le formatage F. Cloppet POO Avancée M1 C++ 275
Formatage On peut préciser Le nombre de caractères réservés pour l écriture setw(int nb) : la sortie sera faite sur nb caractères setfill(char c) : remplit les blancs avec le caractère c passé en paramètre Le nombre de chiffres significatifs pour des réels setprecision(int nb) : nb chiffres significatifs setprecision + fixed : nombre de décimales Le type de notation scientific : notation scientifique F. Cloppet POO Avancée M1 C++ 276
Formatage F. Cloppet POO Avancée M1 C++ 277
Surcharge opérateur << F. Cloppet POO Avancée M1 C++ 278
Surcharge opérateur << (suite) F. Cloppet POO Avancée M1 C++ 279
Surcharge opérateur << Autre solution (sans accesseurs) F. Cloppet POO Avancée M1 C++ 280
Surcharge opérateur << (suite) Autre solution (sans accesseurs) F. Cloppet POO Avancée M1 C++ 281
Surcharge opérateur >> F. Cloppet POO Avancée M1 C++ 282
Surcharge opérateur >> (suite) F. Cloppet POO Avancée M1 C++ 283
Fichiers Généralités Créer un fichier Ouvrir le fichier en écriture Écrire les données dans le fichier Fermer le fichier Lire des données écrites dans un fichier Ouvrir le fichier en lecture Lire les données à partir du fichier Fermer le fichier F. Cloppet POO Avancée M1 C++ 284
Fichiers Généralités Deux types de fichiers Fichiers textes Lisibles par un éditeur de texte Fichiers binaires Copie bit à bit du contenu de la mémoire Non lisibles par un éditeur de texte Bibliothèque standard C++ fstream F. Cloppet POO Avancée M1 C++ 285
Bibliothèque fstream Classe ofstream #include<fstream> Fichier ouvert en écriture créé par appel du constructeur de la classe Méthode is_open() renvoie true si le fichier a bien été ouvert Écriture dans le fichier avec l opérateur << Méthode close() : ferme le fichier ouvert Classe ifstream Fichier ouvert en lecture créé par appel du constructeur de la classe Méthode is_open() renvoie true si le fichier a bien été ouvert Lecture à partir du fichier avec l opérateur >> Méthode close() : ferme le fichier ouvert F. Cloppet POO Avancée M1 C++ 286
Fichiers Fichier texte Constructeur de la classe ofstream ou ifstream avec un seul paramètre Le nom du fichier Utilisent les mêmes fonctions de formatage que cin et cout F. Cloppet POO Avancée M1 C++ 287
Fichiers Fichier texte F. Cloppet POO Avancée M1 C++ 288
Fichiers Fichier texte utilisent les mêmes fonctions de formatage que cin et cout F. Cloppet POO Avancée M1 C++ 289
Fichiers texte Écrire à la suite d un fichier existant Ajout d un dun deuxième paramètre dans le constructeur : std::ios::app F. Cloppet POO Avancée M1 C++ 290
Fichiers texte Lire à partir d un fichier F. Cloppet POO Avancée M1 C++ 291
Fichiers texte Lecture ligne par ligne F. Cloppet POO Avancée M1 C++ 292
Fichiers binaires données sont lues/écrites séquence d'octets par séquence d'octets On peut lire/écrire que les types de base (int, float,...) Opérations plus rapides qu avec un fichier texte Permet de lire des formats de fichiers binaires (TIF, PNG ) Ajout du paramètre a ios::out out ios::binary (resp ios::in ios::binary) dans le constructeur pour écriture (resp. lecture) la méthode write((char *)buffer, int nb) pour écrire nb octets dans le fichier méthode read((char *)buffer, int nb) pour lire nb octets du fichier F. Cloppet POO Avancée M1 C++ 293
Fichiers binaires F. Cloppet POO Avancée M1 C++ 294
Fichiers binaires F. Cloppet POO Avancée M1 C++ 295
Notions Complémentaires Les exceptions Définition Une exception est un signal qui indique que quelque chose d exceptionnel (comme une erreur) s est sest produit. Elle interrompt le flot d exécution normal du programme C est un objet instancié lors d un incident => une exception est levée Mécanisme simple et lisible Regroupement du code réservé au traitement des erreurs pas de «mélange» avec l algorithme Isoler les instructions susceptibles de provoquer des exceptions Prévoir un traitement d erreur sur ces instructions Possibilité de récupérer une erreur à plusieurs niveaux d une application (traitement ou propagation dans la pile des appels de méthodes) F. Cloppet POO Avancée M1 C++ 296
Les exceptions une fonction rencontre une erreur elle lance une exception la fonction courante est terminée immédiatement les fonctions appelantes sont aussi terminées jusqu'a trouver un morceau de code qui sache gérer l'exception si aucun bloc de code ne traite l'exception, le programme se termine F. Cloppet POO Avancée M1 C++ 297
Les exceptions Illustration de la propagation F. Cloppet POO Avancée M1 C++ 298
Les exceptions Les erreurs classiques à traiter avec des exceptions sont dépassement d'indices dans les tableaux dépassement de capacité le résultat d'un calcul est plus grand que le maximum représentable par la variable division i i par zéro allocation mémoire impossibleibl manque de mémoire F. Cloppet POO Avancée M1 C++ 299
Les exceptions Il existe des types d erreur prédéfinies bad_alloc : problème d'allocation thrown by new on allocation failure bad_cast : problème de dynamic_cast ios_base::failure problème d'iostream bad_typeid problème de pointeur Vocabulaire Capturer ou attraper (catch) une exception permet de traiter les erreurs Lancer ou déclencher (throw) une exception consiste à signaler les erreurs mais à reporter son traitement F. Cloppet POO Avancée M1 C++ 300
Les exceptions F. Cloppet POO Avancée M1 C++ 301
Les exceptions On peut définir ses propres p classes exception Classe dérive de la classe exception de la librairie STL F. Cloppet POO Avancée M1 C++ 302
Les exceptions F. Cloppet POO Avancée M1 C++ 303
Les exceptions On peut définir ses propres classes «exception»- illustration (suite) F. Cloppet POO Avancée M1 C++ 304
Notions complémentaires Smart Pointeur = Pointeur intelligent Le pb des pointeurs Pour un new => un delete sinon fuite mémoire Comment gérer les delete dans un code complexe? F. Cloppet POO Avancée M1 C++ 305
Notions complémentaires Smart Pointeur = Pointeur intelligent dans la STL depuis le C++0x norme de 2011 Pas compatible avec les "anciens" compilateurs classe qui encapsule la notion de pointeur Offre une sémantique de plus haut niveau Possède un mécanisme qui gère la durée de vie des objets pointés Plusieurs types shared_ptr weak_ptr unique_ptr F. Cloppet POO Avancée M1 C++ 306
Smart Pointeur Shared_ptr Principe stockage du pointeur comptage des références grâce à un compteur interne +1 : création, affectation, copie -1 : destruction delete de la donnée lorsque le compteur = 0 F. Cloppet POO Avancée M1 C++ 307
Smart Pointeur Shared_ptr F. Cloppet POO Avancée M1 C++ 308
Smart Pointeur shared_ptr F. Cloppet POO Avancée M1 C++ 309