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.
Standardní vstup a výstup
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.
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 |
setw(int) | minimální počet znaků pro vypsání hodnoty |
dec oct hex | výpis čísla v desítkové, osmičkové nebo š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 |
fixed, scientific | nastavení pro zobrazení reálných čísel |
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> #include <iostream> using namespace std; int main() { //----------- jednoduché ukládání do souboru použitím operátora << int hod = 123; fstream f1; f1.open("POKUS.TXT", ios::out); //otevření pro zápis // nebo pro deklaraci ofstream f1 staci jenom: f1.open("POKUS.TXT"); if(f1.fail()) { cout << "Chyba pri otevreni souboru"; return -1; } f1 << hod; cout << "Hodnota ulozena do souboru\n" << endl; f1.close(); //---------- jednoduché čtení ze souboru použitím operátora >> hod = 0; fstream f2; f2.open("POKUS.TXT", ios::in); //otevření pro čtení // nebo pro deklaraci ifstream f2 staci jenom: f2.open("POKUS.TXT"); if(f2.fail()) { cout << "Chyba pri otevreni souboru"; return -1; } f2 >> hod; cout << "Nacteno ze souboru:" << hod << endl; f2.close(); return 0; }
Pro neformátový zápis a čtení se používají funkce write(), read(), put(), get(), getline()...