Flots d'entrFlots d'entréée / sortiee / sortie
C++ prC++ préévoit des entrvoit des entréées / sorties es / sorties àà l'aide des l'aide des
objets, appelobjets, appeléés flots, vers trois ms flots, vers trois méédia diffdia difféérents:rents:
–– la console / le clavier (standard)la console / le clavier (standard)
ddééclarations dans clarations dans <>
–– les fichiersles fichiers
ddééclarations dans clarations dans <>
–– la mla méémoire (buffers)moire (buffers)
ddééclarations dans clarations dans <>
Pour toute classe type flot de donnPour toute classe type flot de donnéées:es:
–– l'entrl'entréée est faite par l'ope est faite par l'opéérateur polymorphe rateur polymorphe >>>>
–– la sortie est faite par l'opla sortie est faite par l'opéérateur polymorphe rateur polymorphe <<<<
I/O I/O StreamsStreams
Flots d'entrFlots d'entréée / sortiee / sortie
Version obsolVersion obsolèète (VS 6.0): te (VS 6.0): IOStream LibraryIOStream Library
–– accessible par inclusion :accessible par inclusion :
##includeinclude <>
voidvoid main()main()
{ cout<<"Coucou !{ cout<<"Coucou !\\n"; }n"; }
Version ANSI/ISO : Version ANSI/ISO : Standard Template LibraryStandard Template Library
–– accessible par inclusion :accessible par inclusion :
##includeinclude <>
usingusing namespacenamespace stdstd;;
voidvoid main()main()
{ cout<<"Coucou !{ cout<<"Coucou !\\n"; }n"; }
I/O I/O StreamsStreams
Architecture de classesArchitecture de classes
de de IOStreamIOStream
ios
istream ostream
iostreamistrstream ostrstreamifstream ofstream
istream_withassign ostream_withassign
fstream strstream stdiostream
I/O I/O StreamsStreams
Flots d'entrFlots d'entréée / sortiee / sortie
Les trois familles partagent une base virtuelle Les trois familles partagent une base virtuelle
unique appelunique appeléée e iosios
Quatre flots standard dans Quatre flots standard dans <>::
–– coutcout pour les sorties vers la consolepour les sorties vers la console
instance globale de instance globale de ostream_withassignostream_withassign
–– cincin pour les entrpour les entréées du clavieres du clavier
instance globale de instance globale de istream_withassignistream_withassign
–– cerrcerr pour les messages d'erreur (=cout)pour les messages d'erreur (=cout)
instance globale de instance globale de ostream_withassignostream_withassign
–– clogclog pour les messages d'activitpour les messages d'activitéé
instance globale de instance globale de ostream_withassignostream_withassign
I/O I/O StreamsStreams
Flots d'entrFlots d'entréée / sortiee / sortie
Les opLes opéérateurs rateurs <<<< et et >>>> sont surchargsont surchargéés pour s pour
tous les types natifs (tous les types natifs (charchar, , shortshort, , intint, , longlong etc.)etc.)
istreamistream& & istreamistream::::operatoroperator>>(type_de_base& variable) >>(type_de_base& variable)
{/* ... */}{/* ... */}
ostreamostream& & ostreamostream::::operatoroperator<<(type_de_base variable) <<(type_de_base variable)
{/* ... */}{/* ... */}
Manipulateurs :Manipulateurs :
–– ils s'insils s'insèèrent comme les variables et modifient le rent comme les variables et modifient le
comportement des fluxcomportement des flux
–– pour les manipulateurs avec parampour les manipulateurs avec paramèètre il faut inclure tre il faut inclure
iomanip.hiomanip.h ou ou iomanipiomanip
I/O I/O StreamsStreams
Flots d'entrFlots d'entréée / sortiee / sortie
Manipulateur Sens Compatibilité Signification
oct E/S IOStream, STL affichage / lecture octale
dec E/S IOStream, STL affichage / lecture décimale
hex E/S IOStream, STL affichage / lecture hexadécimale
flush S IOStream, STL vide le buffer de sortie
endl S IOStream, STL insère un saut de ligne et vide le buffer
ends S IOStream, STL insère un caractère nul ('\0')
setbase(int base) E/S STL change la base (seulement entre 8, 10 et 16)
setprecision(int nb) E/S IOStream, STL définit le nombre de chiffres après la virgule
setw(int nbcar) E/S IOStream, STL définit la taille du champ suivant
setfill(int car) E/S IOStream, STL définit le caractère de remplissage (par défaut ' ')
setiosflags(long f) E/S IOStream, STL modifications avancées de toutes les options
resetiosflags(long f) E/S IOStream, STL restauration par défaut de toutes les options
I/O I/O StreamsStreams
Flags (Flags (fmtflagsfmtflags) pour ) pour
[[rere]]setiosflagssetiosflags()()
I/O I/O StreamsStreams
affichage praffichage prééfixe base (0x ou 0)fixe base (0x ou 0)showbaseshowbase
affichage affichage boolbool comme "comme "truetrue/false"/false"boolalphaboolalpha
base 10, 16, 8base 10, 16, 8decdec / / hexhex / / octoct
affichage du "+" si positifaffichage du "+" si positifshowposshowpos
affichage virguleaffichage virguleshowpointshowpoint
alignement alignement àà droitedroiterightright
alignement alignement àà gauchegaucheleftleft
format scientifiqueformat scientifiquescientificscientific
virgule fixevirgule fixefixedfixed
PlongPlongéés dans le souss dans le sous--espace espace ios_baseios_base ::
Pourquoi les flots d'E/S ?Pourquoi les flots d'E/S ?
Plus sPlus sûûr visr vis--àà--vis des fautes de codage :vis des fautes de codage :
voidvoid main()main()
{{
intint i1, i2;i1, i2;
double d1;double d1;
// double erreur a l'ex// double erreur a l'exéécution !!!cution !!!
scanfscanf("%d%("%d%d%lfd%lf", &i1, &d1, i2);", &i1, &d1, i2);
// appel automatique du bon op// appel automatique du bon opéérateurrateur
cincin >> i1 >> d1 >> i2;>> i1 >> d1 >> i2;
}}
(Presque) indispensables dans les (Presque) indispensables dans les templatestemplates
Il ne faut jamais mIl ne faut jamais méélanger les fonctions de langer les fonctions de
stdio.hstdio.h avec les flots de avec les flots de iostreamiostream [.h] [.h] !!
I/O I/O StreamsStreams
Extensions auxExtensions aux
nouvelles classesnouvelles classes
Extension Extension àà n'importe quel objet (surcharge par n'importe quel objet (surcharge par
fonction car opfonction car opéérande droit) :rande droit) :
class class CCercleCCercle
{{
floatfloat x, y, r;x, y, r;
friendfriend
ostreamostream& & operatoroperator<<(<<(ostreamostream& os, & os, constconst CCercleCCercle& c);& c);
};};
ostreamostream& & operatoroperator<<(<<(ostreamostream& os, & os, constconst CCercleCCercle& c)& c)
{{
return os<<"Cercle de rayon "<>
##includeinclude <>
##includeinclude <>
##includeinclude <>
usingusing namespacenamespace stdstd;;
voidvoid main()main()
{{
CCercleCCercle c(1.0f, 3.0f, 4.0f);c(1.0f, 3.0f, 4.0f);
cout << c;cout << c;
fstreamfstream fsfs("cercle.txt",("cercle.txt",iosios::out);::out);
fsfs << c;<< c;
}}
I/O I/O StreamsStreams
bibliothbibliothèèque classique que classique IOStreamIOStream
(obsol(obsolèète sauf VS 6.0)te sauf VS 6.0)
bibliothbibliothèèque STLque STL