Cours de C++ Gestion des flux Mohamed ELWAFIQ 93 Chapitre 10 Gestion des flux P
Cours de C++ Gestion des flux Mohamed ELWAFIQ 93 Chapitre 10 Gestion des flux Pour manipuler les flux d’entrées/sorties, le c++ met à notre disposition des opérateurs surchargés (<< et >>) qui permettent respectivement de lire et d’afficher des données, ces opérateurs pourront parfaitement être redéfinis dans le cas de nos classes, ce qui permettra par exemple d’afficher le contenu des données membres d’une classe à l’écran, ou d’écrire ces mêmes variables dans un fichier. 1. Généralités sur les flux Un flux représente un ensemble de données pouvant être manipulés à la fois en lecture et en écriture. Un flux, aussi appelé canal de données, offre une transparence vis-à-vis de la source ou de la destination des données : - Ecran, fichier, mémoire pour les types de flux de sortie. - Clavier, fichier, mémoire pour les types de flux d’entrée. En c++ , tous les flux sont symbolisés par des classes qui font partie de la librairie ‘iostream.h’. La classe de base est ‘iostream.h’, elle regroupe les caractéristiques comme aux flux d’E/S . Cours de C++ Gestion des flux Mohamed ELWAFIQ 94 Chapitre 10 Les deux principales classes dérivées de la classe ‘iostream’ sont ‘ostrem’ pour les flux de sortie, et ‘istream’ pour les flux d’entrées. Toute les classes de la librairie ‘iostream.h’ disposent des deux opérateurs surchargés << et >>. L’opérande de gauche de l’opérateur << doit correspondre à un objet de la classe ‘ostream’, pour l’opérateur >> cet opérande doit être un objet de la classe ‘istream’. Ces deux opérateurs ont été définis pour les types de données suivants : char, short, int, long, float, double, long double, char*, void*. C++ fournie quatre flux prédéfinis pour afficher ou lire des informations. cout : Flux de sortie standard (l’écran par défaut). Cette variable est un objet d’une classe dérivée de ‘ostream’. cin : Flux d’entrée standard (le clavier par défaut). Cette variable est un objet d’une classe dérivée de ‘istream’. cerr : Sortie erreur standard (l’écran par défaut). Cette variable est un objet d’une classe dérivée de ‘ostream’. clog : Permet à la fois d’envoyer des messages d’erreur vers la sortie erreur standard (l’écran par défaut) et de remplir un fichier d’alerte. Cette variable est un objet de la classe ‘ostream’. Cours de C++ Gestion des flux Mohamed ELWAFIQ 95 Chapitre 10 2. Afficher à l’écran avec ‘cout’ Exemple void main() { int e=37 ; float x=4,5 ; cout<<“début \n“ ; cout<<“Entier : “<<e<<endl ; cout<<“Réel : “ <<x<<endl; } Commentaire - Ce programme utilise 3 fois l’objet ‘cout’ pour afficher du texte à l’écran. - La librairie ‘iostream.h’ fournit un certain nombre de mots clés qui permettent de modifier les caractéristiques d’un flux. Ces commandes sont utilisées directement avec l’opérateur << en respectant la syntaxe ‘cout<<manipulateur ;’. Cours de C++ Gestion des flux Mohamed ELWAFIQ 96 Chapitre 10 Manipulateur Rôle dec Convertir en base décimale hex Convertir en base hexadécimale oct Convertir en base octale ws Supprimer les espaces endl Ajouter un saut de ligne en fin de flux (= à \n) ends Ajouter un caractère de fin de chaîne flush Vider un flux de sortie setbase(int a) Choisir la base (0,8,10 ou 16) . 0 est la valeur par défaut set fill(int c) Choisir le caractère de remplissage (padding) set precision(int c) Indiquer le nombre de chiffres d’un nombre décimal set w Choisir la taille du champ (padding) Exemple int e=31 ; cout<<e ; cout<<hex<<e ; Remarque Le padding consiste à compléter généralement avec des espaces ou des zéros, un élément affiché à l’écran en précisant la taille d’un champ ou d’une colonne (set w). Tout élément affiché dont la taille est insuffisante sera complété par défaut avec des espaces. De cette manière chaque élément affiché possédera la même taille, ce qui facilite l’alignement. Cours de C++ Gestion des flux Mohamed ELWAFIQ 97 Chapitre 10 En plus de ces manipulateurs de flux, la classe ‘iostream’ fournit un ensemble de méthodes. Méthodes Rôle fill() Renvoie le caractère de remplissage fill(char c) modifie le caractère de remplissage précision () renvoie la précision pour le nombre décimal précision (int n) modifie la précision pour le nombre décimal setf(long flag) modifie une propriété de formatage (format) setf(long flag,longchamp) Modifie une propriété de formatage d’un champ width() Renvoie la valeur d’affichage width(int n) Renvoie la valeur d’affichage Exercice #include<iostream.h> #include<iomanip.h> #include<string.h> void main() { int e=15; cout<<"conversion"<<endl; cout<<"Entier : "<<e<<endl; cout<<"Hexadecimal : "<<hex<<e<<endl; cout<<"Octal : "<<oct<<e<<endl; Cours de C++ Gestion des flux Mohamed ELWAFIQ 98 Chapitre 10 cout<<"--------------------------------------\n"; cout<<"Largeur et Padding\n"; float x=3.15; cout.setf(ios::right,ios::adjustfield); cout<<"Decimal : "<<setw(7)<<x<<endl; cout<<"Decimal : "<<setw(7)<<x+1000<<endl; cout<<"Decimal : "<< setw(7)<<setfill('0') <<x<<endl; cout<<"-------------------------------------------\n"; cout<<"Nombre de chiffres\n"; double pi=3.1415; cout<<"PI : "<<pi<<endl; cout<<"PI : "<<setprecision(3)<<pi<<endl; cout<<"PI : "<<setprecision(5)<<endl; cout<<"-------------------------------------------\n"; cout<<"Chaînes, Alignement et Padding\n"; char texte[50]; strcpy(texte,"Bonjour tout le monde"); cout<<texte<<endl; cout.setf(ios::left,ios::adjustfield); cout.width(50); cout.fill('_'); cout<<texte<<endl; } Cours de C++ Gestion des flux Mohamed ELWAFIQ 99 Chapitre 10 3. Saisir au clavier avec ‘cin’ Dans l’exemple suivant : char chaine[10+1] ; cout<<“saisir une chaine : “ ; char chaine [10+1]; cout<< “saisir une chaine :“ ; cin.width(size of(chaine c)) ; cin>> chaine; La fonction ‘width’ fixe le nombre de caractères à affecter à la variable ‘chaine’ sans débordement. La classe ‘istream’ contient la fonction membre ‘getline’ qui permet de saisir des chaînes de caractères comprenant des espaces non acceptés par l’opérateur >>. Le prototype de ‘getline’ est : istream &getline(char* chaine, int nombre, char fin= ’\n’); Avec : ‘chaine’ : chaîne à saisir. ‘nombre’ : nombre maxi de caractères de la chaîne. ‘fin’ : caractère de fin de saisie (par défaut ‘\n’). Cours de C++ Gestion des flux Mohamed ELWAFIQ 100 Chapitre 10 Exercice #include<stdio.h> #include<conio.h> #include<iostream.h> #include<string.h> class voiture { char marque[20+1]; char modele[20+1]; char prix[20+1]; public: voiture(char *ma="",char *mo="",char *pr="") { *marque=*ma; *modele=*mo; *prix=*pr; } void saisie(); void affiche(); }; //-------------------------------------------------- void voiture::saisie() { cout<<“Marque : “; cin.getline(marque,sizeof(marque)); cout<<“Modèle : “; cin.getline(modele,sizeof(modele)); cout<<“Prix : “; cin.getline(prix,sizeof(prix)); } //---------------------------------------------- Cours de C++ Gestion des flux Mohamed ELWAFIQ 101 Chapitre 10 void voiture ::affiche() { cout.setf(ios::left,ios::adjustfield); cout<<"Marque : "; cout.width(20); cout<<marque; cout<<"Modèle : "; cout.width(20); cout<<modele; cout<<"Prix : "; cout.width(20); cout<<prix; cout<<endl; } //------------------------------------- void main() { voiture v1; v1.saisie() ; cout<<endl<< “affichage \n“ ; v1.affiche() ; } 4. Redéfinir les opérateurs de flux Pour redéfinir les opérateurs de flux on doit respecter la syntaxe suivante : Exemple class demo { public : friend ostream& operateur<<(osream&, demo&); friend istream& operateur>>(isream&, demo&); }; //------------------------------------------- ostream& operateur<<(osream&, demo&); { } //------------------------------------------ istream& operateur>>(isream&, demo&); { } Cours de C++ Gestion des flux Mohamed ELWAFIQ 102 Chapitre 10 Commentaire Y Les deux opérateurs << et >> sont surdéfinis en tant que fonction amie de la classe ‘demo’, de cette manière, ils pourront accéder à tous ces membres. Y Dés que l’opérateur << sera utilisé avec comme opérande de gauche un objet de type ‘ostream’ (ou dérivé) et comme opérande de droite, un objet de type ‘demo’ ce sont les instructions de la fonction opérateur << qui seront exécutées. Y L’opérateur >> est utilisé d’une façon analogue. Y Les opérateurs << et >> peuvent être surdéfinis pour des objets dynamiques. Exemple #include<stdio.h> #include<conio.h> #include<iostream.h> #include<string.h> class voiture { char marque[20+1]; char modele[20+1]; char prix[20+1]; public: voiture(char *ma="",char *mo="",char *pr="") { *marque=*ma; *modele=*mo; *prix=*pr; } friend ostream& operator<<(ostream&, voiture&); friend istream& operator>>(istream&, voiture &); }; Cours de C++ Gestion des flux Mohamed ELWAFIQ 103 Chapitre 10 //---------------------------------------------------------- ostream& operator<<(ostream& out, voiture& v) { out.setf(ios::left, ios::adjustfield); out<<"\tMarque : "<<v.marque; out<<"\tModèle : "<<v.modele; out<<"\tPrix : "<<v.prix<<endl; return out; } //-------------------------------------------------------- istream& operator>>(istream& in, voiture& v) { cout<<"Marque : "; in.getline(v.marque,sizeof(v.marque)); cout<<"\tModele : "; in.getline(v.modele,sizeof(v.modele)); cout<<"\tPrix : " ; in.getline(v.prix,sizeof(v.prix)); return in; } //------------------------------------------------ void main() { voiture v1("Mercedes", "\tCLK 500", "\t19900DH"); cout<<"Saisir la marque,modele et le prix de voiture:\n"; cin>>v1; cout<<"\nAffichage:"<<endl<<v1; getch(); } Cours de C++ Gestion des flux Mohamed ELWAFIQ 104 Chapitre 10 Remarque Dans le cas d’un pointeur vers la classe voiture, il faut redéfinir les opérateurs << et >> comme par exemple : ostream& operator<<(ostream& out , voiture *v) { out.setf(ios::left,ios::adjustfield); out<<"\tMarque:"<<v -->marque; out<<"\tModèle:"<<v -->modele; out<<"\tPrix:"<<v --> prix<<endl; return out; } 5. Lire à partir d’un fichier ou écrire dans un fichier Il suffit de créer un objet de type ‘ofstream’ pour écrire dans un fichier et un objet de type ‘ifstream’ pour lire un fichier. Ces deux classes sont déclarées dans le fichier ‘fstream.h’ et elles dérivent respectivement des classes ‘ostream’ et ‘istream’ Exemple 1 Extrait d’un programme qui permet d’écrire dans un fichier. … ofstream fs("c:\\demo.txt"); if(!fs) { cout<<"Erreur d'écriture dans ce fichier ! \a\a"; return 1; } fs<<"valeur de la donnée: "; fs<<17.12; fs.close(); … Cours de C++ Gestion des flux Mohamed ELWAFIQ 105 Chapitre 10 Commentaire Y Un objet ‘fs’ de type ‘ostream’ est créé pour accéder en écriture au fichier “c:\\demo.txt“. Y En cas de succès de l’ouverture du fichier ‘demo.txt’, les données sont écrites vers le flux de fichier ‘fs’. Exemple 2 Extrait d’un programme permettant de lire un fichier … ifstream fe("c:\\demo.txt"); if(!fs) { cout<<"Erreurs d'ouverture ! \a\a"; return 1; } char texte[30]; double x; fe>>texte; fe>>x; cout<<texte<<x; … uploads/Management/ gestion-des-flux 1 .pdf
Documents similaires










-
29
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Aoû 23, 2022
- Catégorie Management
- Langue French
- Taille du fichier 0.0667MB