Datové proudy
Všechny funkce pro vstup/výstup, které byly v jazyce C, jsou nadále k dispozici i v C++. Kromě toho máme nové nástroje objektových datových proudů. Najdeme je v hlavičkových souborech iostream, iomanip, fstream. Datový proud reprezentuje vždy nějaký "přesun" dat (plynutí dat, nebo proud dat) od zdroje k cíli.
Výstupní proud cout posílá znaky na standardní výstup pomocí operátoru <<. Vstupní proud cin umí zpracovat všechny standardní datové typy, je připojen na standardní vstup pomocí operátoru >>. Pro chybová hlášení se používá výstupní proud cerr.
Při vstupu textů pomocí operátoru >>, můžeme načítat jen po bílé znaky. Vhodnější je použití funkce getline(), která má 2 varianty (jako metoda třídy cin nebo jako funkce pro třídu string).
Manipulátory, jak již sám název napovídá, slouží k manipulaci s proudem, upravují ho. Přehled základních manipulátorů najdete v následující tabulce.
endl | konec řádku, zároveň vyprázdní buffer |
flush | vyprázdní buffer třídy |
setw(int) | minimální počet znaků pro vypsání hodnoty |
dec | výpis čísla v desítkové soustavě |
oct | výpis čísla v osmičkové soustavě |
hex | výpis čísla v šestnáctkové soustavě |
setfill(char) | určuje jakým znakem bude vyplňováno volné místo, je-li nastaveno setw |
setprecision(int) | nastavení přesnosti |
Soubory
Formátovaný vstup a výstup u souboru je podobný jako pro standardní proud cout a cin. Při práci se soubory musíme k programu připojit hlavičkový soubor fstream, potom můžeme použít třídu ofstream pro výstup a ifstream pro vstup. Práce se vstupním nebo výstupním proudem probíhá implicitně v textovém režimu.
Soubor musíme nejdříve otevřít a to buď přímo u konstruktoru nebo použitím členské funkce open(). Konstruktor i funkce open() mají 3 parametry. První parametr je cesta k souboru, druhý parametr jsou atributy otevření souboru (viz. tabulka), třetí parametr je pro sdílení souboru. Povinný je jenom první parametr. Při formátovém zápisu do souboru se používá přetížený operátor >> a pro čtení <<. Operátory se používají stejným způsobem jako pro standardní zařízení. Pro zavření souboru můžeme použít metodu close().
Tabulka základních režimů pro otevření souboru.
ios::in | režim čtení (implicitní pro ifstream) |
ios::out | režim zápis (implicitní pro ofstream) |
ios::app | přidávání na konec souboru |
ios::binary | binární režim |
/************** jednoduchý příklad ****************/ #include <fstream> void main() { int hod = 123; ofstream f1; f1.open("POKUS.TXT", ios::out); //otevření pro zápis // nebo jenom: f1.open("POKUS.TXT"); if(f1.fail()) { cout << "Chyba pri otevreni souboru"; return ; } f1 << hod; f1.close(); hod = 0; ifstream f2; f2.open("POKUS.TXT", ios::in); //otevření pro čtení // nebo jenom: f2.open("POKUS.TXT"); if(f2.fail()) { cout << "Chyba pri otevreni souboru"; return ; } f2 >> hod; cout << hod << endl; f2.close(); }
Pro neformátový zápis a čtení se používají funkce write(), read(), put(), get().