Flux 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
Flux 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
Flux 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
Flux 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
Flux Fichiers Fichier texte F. Cloppet POO Avancée M1 C++ 288
Flux Fichiers Fichier texte utilisent les mêmes fonctions de formatage que cin et cout F. Cloppet POO Avancée M1 C++ 289
Flux 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
Flux Fichiers texte Lire à partir d un fichier F. Cloppet POO Avancée M1 C++ 291
Flux Fichiers texte Lecture ligne par ligne F. Cloppet POO Avancée M1 C++ 292
Flux 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
Flux Fichiers binaires F. Cloppet POO Avancée M1 C++ 294
Flux 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 par zéro allocation mémoire impossible 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