Les flux 
De nouveaux opérateurs font leur entrée, appelés flux (stream), représentés par les symboles << et >>.
Ils permettent de gérer un flux de données entre des entités, et la donnée se dirige dans le sens des flèches.
a << b;: b va vers a
a >> b;: a va vers b
Entrées/sorties 
En C, pour afficher et demander des informations dans la console, nous utilisions printf et scanf.
Désormais nous utiliserons les entrées et sorties de la bibliothèque standard.
Il est nécessaire d’inclure <iostream>
Sorties 
Pour afficher des messages dans la console, on utilisera la sortie standard. Voici comment fonctionne la sortie avec std::cout
#include <iostream>
int main()
{
    // On peut afficher une chaine de caractère
    std::cout << "Bonjour" << std::endl;
    // printf("Bonjour\n");
    // Ou bien un caractère seul.
    std::cout << 'A' << std::endl;
    // Ou bien un chiffre.
    std::cout << 7 << std::endl;
    // Ou bien une variable
    int temperature = 25;
    std::cout << temperature << std::endl;
    // On peut aussi les combiner
    std::cout << "Il fait " << temperature << " degrées" << std::endl;
    // printf("Il fait  %d degrées\n", temperature);
    return 0;
}Pour sauter des lignes, nous utilisons std::endl (équivalent de \n )
Et plus besoin de se rappeler les codes des types de variables avec printf !
Entrées 
Pour les entrées nous utiliserons l'entrée standard avec std::cin en changeant le sens des crochets >>
#include <iostream>
int main()
{
    std::cout << "Entre ton age : " << std::endl;
    int age = 0;
    std::cin >> age;
    std::cout << "Tu as " << age << " ans.\n";
    return 0;
}Pour les chaines de caractères, utiliser std::getline
#include <iostream>
int main()
{
    std::string phrase;
    std::getline(std::cin, phrase);
    std::cout << phrase;
    return 0;
}Pour savoir dans quel sens placer les flèches, il suffit de se demander dans quel sens va l'information:
- std::cout << "hello";: "hello" va vers- cout(sortie)
- std::cin >> variable;:- cin(entrée) va vers- variable
Fichiers 
Pour lire et écrire dans des fichiers, nous utiliserons std::ifstream et std::ofstream
Lecture 
#include <iostream>
#include <fstream>
#include <string>
int main() {
    std::ifstream file("example.txt"); // ouverture de fichier en lecture
    if (!file.is_open()) {             // verification qu'il s'est bien ouvert
        std::cerr << "Erreur lors de l'ouverture du fichier." << std::endl;
        return 1;
    }
    std::string line;
    while (std::getline(file, line)) {  // lecture ligne par ligne
        std::cout << line << std::endl;
    }
    file.seekg(0, std::ios::beg);       // deplacement du curseur au debut
    char c;
    while (file.get(c)) {  // lecture lettre par lettre
        std::cout << c;
    }
    file.close();                       // Fermeture du fichier
    return 0;
}Ecriture 
#include <iostream>
#include <fstream>
int main() {
    std::ofstream file("output.txt");  // ouverture de fichier en ecriture
    if (!file.is_open()) {
        std::cerr << "Erreur lors de l'ouverture du fichier." << std::endl;
        return 1;
    }
    file << "Ceci est une ligne de texte." << std::endl; // ecriture dans le fichier
    file << "Ceci est une autre ligne de texte." << std::endl;
    file.close();
    return 0;
}Attention, par défaut ici on va écraser le contenu du fichier. Tout le contenu precedent sera perdu.
Si on veut rajouter du contenu à la fin, on écrira:
std::ofstream file("output.txt", std::ios::app); // appendGestions des erreurs des entrées 
Avec le code suivant, si on tape une chaine de caractère au lieu d’un entier, on aura un problème pour taper son nom:
#include <iostream>
#include <string>
int main()
{
    std::cout << "Entre ton age : ";
    unsigned int age = 0;
    std::cin >> age;
    std::cout << "Tu as " << age << " ans.\n";
    std::cout << "Entre ton nom : ";
    std::string nom = "";
    std::cin >> nom;
    std::cout << "Tu t'appelles " << nom << ".\n";
    return 0;
}La solution réside dans l’exemple suivant, qui va tester si l’entrée s’est bien passée, et remettre a zero cin autrement
#include <iostream>
#include <limits>
#include <string>
template <typename T>
void input(T &var)
{
    while (!(std::cin >> var))
    {
        std::cout << "Il y a eu une erreur, recommencer:" << std::endl;
        std::cin.clear();                                                   // On remet std::cin dans un état fonctionnel.
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // On vide les caractères mémorisés.
    }
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // On vide les caractères mémorisés.
}
int main()
{
    unsigned int age = 0;
    std::cout << "Entre ton age : ";
    input(age);
    std::cout << "Ton age " << age << std::endl;
    return 0;
}