[ Pobierz całość w formacie PDF ]
.9.Strumienie i plikiStrumieñ jest pewn¹ abstrakcj¹, opisuj¹c¹ urz¹dzenie logiczne, które albo“produkuje” albo “konsumuje” informacjê.W jêzyku C++ operujemy na strumieniachdanych, tzn.sekwencjach wartoœci tego samego typu, dostêpnych w porz¹dkusekwencyjnym.Oznacza to, ¿e dostêp do n-tej wartoœci w strumieniu danych jestmo¿liwy po uzyskaniu dostêpu do poprzednich (n-1) wartoœci.Przez dostêprozumiemy zarówno czytanie wartoœci, jak i wpisywaniewartoœci do strumienia.Strumieñ mo¿e byæ do³¹czony do urz¹dzenia fizycznegoprzez system wejœcia/wyjœcia dziêki odpowiednio zdefinowanym funkcjom czytaniai zapisu.Do³¹czenie strumienia do urz¹dzenia fizycznego jest realizowane w tensposób, ¿e strumieñ jest kojarzony z systemowym urz¹dzeniem logicznym, w któryms¹ zdefiniowane wymienione wy¿ej funkcje czytania i zapisu.W jêzyku C++ wszystkie strumienie zachowuj¹ siê w ten sam sposób, co pozwala nado³¹czanie ich do urz¹dzeñ fizycznych o ró¿nych w³asnoœciach.Tak wiêc mo¿emywykorzystaæ tê sam¹ metodê do wyprowadzenia informacji na ekran, na plikdyskowy, czy drukarkê.Np.wejœcie jest sekwencj¹ zdarzeñ, które pojawiaj¹ siêw systemie: znaki pisane na klawiaturze, wciœniêcie klawisza myszki, etc.Takasekwencja zdarzeñ mo¿e byæ wprowadzona do strumienia wejœciowego.Uruchomienie programu w jêzyku C++ powoduje automatyczne otwarcie czterechstrumieni:cin standardowe wejœcie (domyœlnym urz¹dzeniem fizycznym jest klawiatura)cout standardowe wyjœcie (domyœlnym urz¹dzeniem fizycznym jest ekran monitora)cerr standardowy b³¹d (ekran)clog buforowana wersja cerr (ekran)Ich deklaracje zawarte s¹ w pliku iostream.h.Je¿eli u¿ytkownik ma zamiarwprowadzaæ dane do programu z klawiatury i wyprowadzaæ wyniki na ekran, to musiw³¹czyæ ten plik do swojego programu.9.1.Klasy strumieni wejœcia/wyjœciaStrumienie jêzyka C++ s¹ niczym wiêcej, ni¿ ci¹gami bajtów.Sposóbinterpretacji kolejnych bajtów w ci¹gu dla typów wbudowanych jest zawarty wdefinicjach klas strumieni.Dla typu (klasy) definiowanego w programieu¿ytkownik mo¿e wykorzystaæ operacje dostêpne w klasach strumieni, b¹dŸprzeci¹¿yæ te operacje na rzecz w³asnej klasy.Podstawowe klasy strumieni wejœcia/wyjœcia s¹ zdefiniowane w dwóch plikachnag³Ã³wkowych: iostream.h oraz fstream.h.Uproszczony schemat hierarchii tychklas pokazano na rysunku 9-1.Rys.9-1 Klasy strumieni we/wyW pliku nag³Ã³wkowym iostream.h zawarte s¹ deklaracje czterech podstawowych klaswe/wy: ios, istream, ostream i iostream.Klasa ios jest klas¹ bazow¹ dlaistream i ostream, które z kolei s¹ klasami bazowymi dla iostream.Klasa iosmusi byæ wirtualn¹ klas¹ bazow¹ dla klas istream i ostream, aby tylko jednakopia jej sk³adowych by³a dziedziczona przez iostream:class istream : virtual public ios { //.}class ostream : virtual public ios { //.}class iostream:public istream,public ostream { //.}W klasie ios jest zadeklarowany wskaŸnik do klasy streambuf, która jestabstrakcyjn¹ klas¹ bazow¹ dla ca³ej rodziny klas buforów strumieni.Bufory tes³u¿¹ jako chwilowa pamiêæ dla danych z wejœcia i wyjœcia, a tak¿e jako sprzêgi³¹cz¹ce strumienie z urz¹dzeniami fizycznymi.Poniewa¿ klasy istream i ostream zawieraj¹ wskaŸniki do innych klas, ka¿da znich ( b¹dŸ klasa od niej pochodna) ma zdefiniowany w³asny operatorprzypisania.Obiektem klasy istream jest wymieniony uprzednio strumieñ cin, zaœ obiektamiklasy ostream s¹ strumienie cout, cerr i clog.W klasie istream deklaruje siê funkcje operatorowe operator>>().Przeci¹¿onyoperator pobrania '>>' s³u¿y do wprowadzania danych do programu ze strumieniacin, standardowo zwi¹zanego z klawiatur¹.Przyk³adowe prototypy tych funkcjimaj¹ postaæ:istream& operator>>(signed char*);istream& operator>>(int&);istream& operator>>(double&);Instrukcjê wprowadzania danej ze strumienia cin zapisuje siê w postaci:cin >> zmienna;gdzie zmienna zadeklarowanego typu okreœla wywo³anie odpowiedniegoprzeci¹¿onego operatora '>>'.F Uwaga.Operator “>>” pomija (przeskakuje) przy czytaniu tzw.bia³e znaki,czyli spacje, znaki tabulacji i znaki nowego wiersza.Nale¿y o tym pamiêtaæprzy wczytywaniu danych do zmiennych typu char i char*.Przeci¹¿ony operator wstawiania “
[ Pobierz całość w formacie PDF ]