Vhodne in izhodne operacije se v jeziku C++ odvijajo v tokovih (stream).
Tok je zaporedje zlogov, "teče" iz enote (tipkovnica, disk, mreža) v pomnilnik. Pri izhodni operaciji pa zlogi "tečejo" iz pomnilnika v enoto.
Za delo z datotekami imamo na voljo naslednje knjižnice:
Enote, iz katerih beremo in na katere pišemo podatke (cout, cerr, clog in cin) so v knjižnici <iostream.h> definirane kot objekti. Enote cout, cerr in clog so objekti tipa ostream, enota cin pa je objekt tipa istream. Ti objekti so povezani s standardnimi enotami računalnika: cout s standardnim izhodom (ponavadi zaslon), cin s standardnim vhodom (ponavadi tipkovnica) cerr in clog pa s standardno enoto za napake (prav tako ponavadi zaslon).
Prekriti operator >> za branje vrne vrednost, ki jo želimo prebrati. Kadar pa na enoti, iz katere beremo, naleti na konec datoteke, vrne 0 (nepravilno). Konec datoteke je različen od sistema. Na sistemih DOS in MS Windows ga vnesemo s pritiskom na tipko <Cntrl-Z> na sistemih Unix pa s pritiskom <Ctrl-D>.
#include <iostream>
using namespace std;
void main()
{
int stevilo, vsota = 0;
cout << "Vnesi celo število (ali end -of file za konec):";
while (cin >> stevilo)
{
vsota += stevilo;
cout <<"Vnesi celo število (ali end -of file za konec):";
}
cout <<" Vsota števil je: " << vsota;
system("pause");
}
Pri izpisu se tok znakov ne zapiše takoj v enoto, na katero pišemo, temveč se shranjuje v vmesnik (buffer). Podobno se zgodi pri branju iz enote. Praznenje vmesnika (flushing) je operacija, ki povzroči da se vsi znaki, ki so trenutno v vmesniku zapišejo v enoto.