Dans le cours 1, je décris comment effectuer des entrées / sorties formatées, en utilisant les classes de flux du c++.

Il faut bien maitriser ces notions, pour commencer tout de suite des petits programmes, qui permettent de vérifier le contenu des variables, après les avoir saisies dans des flux standards.

Pour cela, j'ai placé, dans le sous-répertoire source de cpptutor, des fichiers .cpp qui illustrent simplement les notions de base de ce tutoriel.

La classe de base, dont dérive beaucoup de classes pour les flux d'entrée (stdin) et les flux de sortie (stdout) est appelée ios (de l'anglais input output stream, flux d'entrées sorties)

Si vous voulez savoir dès maintenant ce qu'est une classe, reportez-vous au (cours 2 types du c++)

Si vous voulez savoir ce qu'est une classe de base et une classe dérivée, reportez-vous au (cours 5 l'héritage)

Il est préférable de commencer à vous familiariser avec le langage, en consultant de petits programmes, sans nécessairement tout comprendre ! Il suffit, pour l'instant, de connaître la syntaxe des expressions, pour les utiliser dès maintenant.

Consultez le lien suivant, qui vous donne tous les exemples importants de borland, sur les opérations i / o (input ou get, entrer ou donner) (output ou put, sortir ou mettre)

aide usingios.txt

Dans cette aide, vous trouverez la hierarchie des classes, qui est assez complexe, car il y a des héritages multiples.

Pour simplifier, disons qu'il y a essentiellement 2 ensembles de classes, celles qui utilisent un pointeur, et celles qui utilisent un buffer, pour les opérations sur les flux.

La terminologie introduit des noms de classes qui commencent par i ou par o ou par io, suivant qu'elles concernent les entrées, les sorties ou les entrées / sorties. ensuite, on trouve la lettre s ou le mot stream.

Les classes qui utilisent un buffer font intervenir le suffixe buf, dans leur nom.

Enfin, des classes sont spécialisées pour le traitement des fichiers (files) ou des chaines (strings) On les reconnaîtra grâce au préfixe file ou str ainsi on trouve :

ios istream ostream ifstream ofstream

istreambuf ostreambuf istrstream ostrstream

Il n'est pas utile d'énumérer toutes les classes, avec leur parenté Il suffit de savoir quel header (en tête) contient leurs déclarations

Ce sont essentiellement les fichiers iostream.h fstream.h et iomanip.h

Pour les programmeurs en c, disons que tous ces flux du c++, permettent d'effectuer les opérations que vous avez l'habitude de faire, avec les fonctions scanf et printf, et les fonctions associées fscanf, fprintf, sscanf, sprintf...

mais les opérations en c++ sont plus fiables et sécurisées.

On trouve dans iostream.h, la déclaration des flux standards, qui sont des objets des classes istream_withassign et ostream_withassign. Ils ont pour noms :

cin qui est l'analogue du flux stdin (entrée à partir du clavier)

cout qui est l'analogue de stdout (sortie standard sur l'écran)

cerr qui est l'analogue de stderr (sortie standard pour les erreurs)

et clog qui n'a pas d'équivalent en langage c (sorties d'erreurs avec buffer)

On trouve dans ces 2 classes, respectivement, 2 opérateurs surchargés << et >> L'opérateur de décalage binaire à gauche <<, est associé à cout, et >> est associé à cin

Vous vous demandez ce que peut bien vouloir dire qu'un opérateur est surchargé (de l'anglais overload) Disons simplement que le langage c++ est un langage fortement typé, qui permet de définir des fonctions qui ont le même nom, à condition que leurs arguments aient un type ou un nombre significatif différent. Cela permet d'introduire dans les méthodes d'une classe, des fonctions membres comme des constructeurs, qui ont le même nom que celui de la classe, des opérateurs surchargés, qui ont le même nom qu'un opérateur usuel, mais qui opérent différemment sur les objets de la classe...

Pour plus de détails, consultez (overload overread constructor destructor operator dans le cours 2)

La syntaxe pour une sortie standard avec cout est :

cout << var;

De même, la syntaxe d'une entrée standard avec cin est :

cin >> var;

Les types reconnus par les opérateurs surchargés << et >> sont :

char short int long float double double char * et void *

Par exemple, vous pouvez facilement mélanger des chaînes, des valeurs... comme le montre l'écriture suivante :

int i = 2003 ;

cout << "voici la valeur de l'entier i :" << i << endl;

Dans l'écriture ci-dessus, l'expression endl indique un retour à la ligne. On peut en effet utiliser des indicateurs (flags) ou des fonctions de formatage, comme :

dec oct hex, pour décimal, octal ou hexa_décimal.

Par défaut, les nombres sont sortis sous la forme décimale. Pour une sortie hexa_décimale de l'entier i, on écrira simplement :

cout << "voici la valeur héxa_décimale de i : " << hex << i <

Toutes les sorties ultérieures seront sous la forme indiquée, jusqu'à la rencontre d'un autre indicateur.

On écrira cout << dec ; pour revenir aux sorties décimales usuelles.

Voici la liste des indicateurs usuels :

endl va à la ligne et vide le tampon

ends ajoute une ligne

flush vide le tampon

Les fonction suivantes sont des manipulateurs de format. Elles sont déclarées dans iomanip.h

setbase (int n) avec n = 2 8 10 16 définit le mode binaire, octal...

setprecision(int n) définit le nombre de chiffres après la virgule

setiosflags(long f) définit le format de bits associé à f

setfill(int c) définit le caractère c de remplissage (qui est l'espace par défaut)

width(int n) définit l'étendue du champ

Par exemple :

width(10);

setfill('*');

cout << "abcd" ;

donnera la sortie ******abcd

En effet, le remplissage de l'étendue du champ se fait à gauche, par défaut.

consultez la fonction setf pour ajuster le remplissage à droite.

Vous pouvez ajouter de nouvelles surcharges aux opérateurs << ou >>, si besoin est. Le lien suivant en est un exemple :

exemple : surcharge de l'opérateur << (overload.cpp)

Les entrées standard se traitent de la même manière, mais en utilisant cin et l'opérateur surchargé >> Par exemple :

float f ;

cout << "entrez un flottant\n";

cin >> f ;

Vous transposerez par vous-même les exemples ci-dessus, en utilisant cin avec des manipulateurs de format.

Vous pouvez consulter les exemples élémentaires sur les flux du c++, en activant les liens suivants :

cin.cpp : entrée formatée dans stdin

istream.cpp : la classe istream

setiosfl.cpp : la méthode setiosflag

setpreci.cpp : la méthode setprecision

put.cpp : la méthode put

get.cpp : la méthode get

getline.cpp : la méthode getline

write.cpp : la méthode write

open.cpp : la méthode open

suivant : cours 2 les types du c++

retour au sommaire du cours cpptutor