Fragment notatki:
Operacje wejścia / wyjścia Wykład 10 10/12/13 2 Strumienie Wprowadzanie i wyprowadzanie informacji można potraktować jako strumień bajtów płynący od źródła do ujścia Strumienie są realizowane w C++ na zasadzie klas Dysponujemy dwoma poziomami wczytywania i wypisywania informacji Poziom niższy – elementarny, umożliwia tylko przysyłanie bajtów od źródła do ujścia Nie ma interpretacji Poziom wyższy – jw. z dodatkową interpretacją informacji (konwersję, sposób wyświetlania itp.) 10/12/13 3 Biblioteka do obsługi strumieni W C++ operacje we/wy wykonywane są za pomocą strumieni Hierarchia klas oraz i rozmieszczenie w plikach nagłówkowych jest następująca 10/12/13 4 Klasy niższego poziomu do obsługi strumieni streambuf - abstrakcyjna klasa bazowa, z której wywodzą się obiekty odpowiadające za bufor strumieni filebuf – instancje tej klasy odpowiadają za operacje wejścia i wyjścia dla plików oraz umożliwiają tworzenie strumieni związanych z tymi plikami stringbuf – jw. tylko w odniesieniu do tekstów, a nie plików 10/12/13 5 Standardowe wejście/wyjście io_base oraz ios – klasy definiujące składniki każdego strumienia, niezależnie czy to wejściowego czy wyjściowego istream – klasa udostępniająca metody do odczytu i interpretacji ze strumienia wejściowego ostream - klasa udostępniająca metody do zapisu do strumienia wyjściowego iostream - klasa udostępniająca metody do odczytu i zapisu ze strumienia wejściowego i wyjściowego, odziedziczona po klasach istream i ostream 10/12/13 6 Obiekty reprezentujące standardowe wejście i wyjście Standardowe kanały we/wy zdefiniowano jako obiekty globalne istream cin – standardowe wejście (odpowiednik stdin z C), normalnie związany z klawiaturą ostream cout – standardowe wyjście (odpowiednik stdout z C), normalnie związany z monitorem ostream cerr – standardowe wyjście błędów (odpowiednik stderr z C), normalnie związany z monitorem. Służy do sygnalizowania błędów Domyślnie nie jest buforowany ostream clog – standardowe wyjście logowania (brak odpowiednika w C), normalnie związany z tym samym co cerr Domyślnie jest buforowany Przykład cpp_10.1 10/12/13 7 Klasy strumieni służące do operacji na plikach i tekstach ifstream – klasa udostępniająca interfejs do odczytu danych z plików ofstream – klasa udostępniająca interfejs do zapisu danych do
(…)
… << i >>
Przy pracy ze strumieniami wykorzystujemy przeładowane
operatory << i >> (normalnie przesunięcie bitowe w lewo i
w prawo)
Potrzebne było zdefiniowanie jakiś operatorów do
wstawiania i pobierania danych ze strumieni
Wybór padł na << i >> ponieważ sugerują one ruch przez co
ich użycie jest zgodne z naszą intuicyjną
Można się spotkać z angielskim nazwami tych operatorów
odpowiednio insert (put to) i extract (get from)
Zarówno << jaki i >> zwracają referencję do strumienia na
którym pracują
10/12/13
Możliwe jest kaskadowe łączenie tych operatorów ze sobą
8
Domniemania przy pracy ze
strumieniami predefiniowanymi
Wstawianie do strumienia (wypisywanie)
Typy całkowite (int, long ...) wypisywane są w systemie
dziesiętnym
Typy znakowe (char) wypisywane są jako pojedynczy znak
Liczby zmiennoprzecinkowe (float, double ...) wypisywane
są z dokładnością do 6 miejsc dziesiętnych (bez zbędnych
zer)
Wskaźniki (bez char*) wypisywane są szesnastkowo
Wskaźniki do char wypisywane są jako tekst, na który dany
wskaźnik pokazuje
static_cast<void*>(wsk); //wypisanie adresu
Przykład cpp_10.2
10/12/13
9
Domniemania przy pracy ze
strumieniami predefiniowanymi...
Pobieranie ze strumienia (wczytywanie…
… podstawę konwersji,
showpoint - pokaż kropkę dziesiętną,
uppercase - wielkie litery (w liczbach),
showpos - znak + w liczbach dodatnich,
scientific - notacja wykładnicza liczb zmiennoprzecinkowych.,
fixed - notacja zwykła liczb zmiennoprzecinkowych.,
unitbuf - buforowanie,
14
Formatowanie…
Modyfikacja flag za pomocą metod
setf, unsetf – niezbyt poręczny wymaga pamiętania nazw
wspomnianych flag…
…
Przykład cpp_10.13
10/12/13
27
Katalogi, ścieżki (i pliki)
Biblioteka standardowa języka C++ nie umożliwia
operacji na ścieżkach i katalogach
Główną przyczyną jest duża zależność tych operacji od
systemu operacyjnego
Korzystając z Boost Filesystem Library można
operować na ścieżkach, katalogach oraz plikach
Np. Struktura katalogów w UNIX i Windows są znacząco
odmienne
Należy jednak pamiętać…
…
Sterowanie odbywa się poprzez flagi stanu formatowania zdefiniowane jako typ
wyliczeniowy w klasie ios
10/12/13
boolalpha – format zapisu wartości logicznych,
skipws - ignoruj białe znaki,
left - justowanie lewe,
right - justowanie prawe,
internal - justowanie wewnętrzne,
dec - konwersja dziesiętna,
oct - konwersja ósemkowa,
hex - konwersja szesnastkowa,
showbase - pokaż…
... zobacz całą notatkę
Komentarze użytkowników (0)