41
Przestrzenie nazw, Przestrzenie nazw, strumienie strumienie

Przestrzenie nazw, strumienie

  • Upload
    bijan

  • View
    56

  • Download
    0

Embed Size (px)

DESCRIPTION

Przestrzenie nazw, strumienie. Przestrzenie nazw. Przestrzeń nazw – co to takiego? namespace Kiedy potrzebujemy przestrzeni nazw?. Przestrzenie nazw - używanie. namespace moja { void printf(int); class plik; void fprintf(const plik&, int); } moja::printf(44); moja::plik plikwe; - PowerPoint PPT Presentation

Citation preview

Page 1: Przestrzenie nazw, strumienie

Przestrzenie nazw, Przestrzenie nazw, strumieniestrumienie

Page 2: Przestrzenie nazw, strumienie

Przestrzenie nazwPrzestrzenie nazw

Przestrzeń nazw – co to takiego?Przestrzeń nazw – co to takiego?

namespacenamespace

Kiedy potrzebujemy przestrzeni nazw?Kiedy potrzebujemy przestrzeni nazw?

Page 3: Przestrzenie nazw, strumienie

Przestrzenie nazw - używaniePrzestrzenie nazw - używanie

namespace mojanamespace moja{{

void printf(int);void printf(int);class plik;class plik;void fprintf(const plik&, int);void fprintf(const plik&, int);

}}

moja::printf(44);moja::printf(44);moja::plik plikwe;moja::plik plikwe;fprintf(plikwe, 31415323);fprintf(plikwe, 31415323); // wystarczy, że jeden z argumentów// wystarczy, że jeden z argumentów

// należy do przestrzeni moja, aby funkcja// należy do przestrzeni moja, aby funkcja// fprintf była najpierw szukana w przestrzni // fprintf była najpierw szukana w przestrzni

mojamoja// (reguła wyszukiwania Koeniga)// (reguła wyszukiwania Koeniga)

Page 4: Przestrzenie nazw, strumienie

Przestrzenie nazw - używaniePrzestrzenie nazw - używanie Przestrzenie nazw można dowolnie rozszerzać i łączyćPrzestrzenie nazw można dowolnie rozszerzać i łączyć

w jednym plikuw jednym pliku w kilku plikachw kilku plikach

Nazwę (lub wszystkie nazwy) z przestrzeni nazw można Nazwę (lub wszystkie nazwy) z przestrzeni nazw można przenieść na globalny (lokalny) poziom widocznościprzenieść na globalny (lokalny) poziom widoczności using moja::plik; using moja::plik; using namespace moja;using namespace moja;

Nie używaj using w plikach nagłówkowych!Nie używaj using w plikach nagłówkowych! dlaczego?dlaczego? używaj kwalifikacji nazwa_namespace::nazwa_z_namespace!używaj kwalifikacji nazwa_namespace::nazwa_z_namespace!

Page 5: Przestrzenie nazw, strumienie

Przestrzenie nazw – std::Przestrzenie nazw – std::

W przestrzeni nazw std:: zdefiniowana jest Biblioteka W przestrzeni nazw std:: zdefiniowana jest Biblioteka Standardowa C++ Standardowa C++ klasy strumienioweklasy strumieniowe klasy łańcuchoweklasy łańcuchowe STLSTL

Dawniej używano nagłówków (obsolete): „*.h”, „*.hpp”, „*.hxx”Dawniej używano nagłówków (obsolete): „*.h”, „*.hpp”, „*.hxx” Znacząco rozszerzona w standardzie C++11 (głównie część STL)Znacząco rozszerzona w standardzie C++11 (głównie część STL) Rozszerzenia języka i bibliotek C++11 nie są jeszcze w pełni Rozszerzenia języka i bibliotek C++11 nie są jeszcze w pełni

wspierane przez kompilatory; wykład o C++11 na przedmiocie wspierane przez kompilatory; wykład o C++11 na przedmiocie MiNWO poświęcony będzie nowemu standardowi C++MiNWO poświęcony będzie nowemu standardowi C++

Page 6: Przestrzenie nazw, strumienie

Książki o STL i bibliotece Książki o STL i bibliotece standardowej C++standardowej C++

Nicolai M. Josuttis: C++ Standard Library: A tutorial and Nicolai M. Josuttis: C++ Standard Library: A tutorial and Reference, 1st, Pearson 1999,Reference, 1st, Pearson 1999,

przykłady: przykłady: http://www.josuttis.com/libbook/examples.ziphttp://www.josuttis.com/libbook/examples.zip (Polska wersja: Nicolai M. Josuttis: C++ Biblioteka standardowa (Polska wersja: Nicolai M. Josuttis: C++ Biblioteka standardowa

Podręcznik Programisty, Helion 2003, przykłady: Podręcznik Programisty, Helion 2003, przykłady: ftp://ftp.helion.pl/przyklady/cpbspp.zipftp://ftp.helion.pl/przyklady/cpbspp.zip))

Nicolai M. Josuttis: C++ Standard Library: A tutorial and Nicolai M. Josuttis: C++ Standard Library: A tutorial and Reference, 2nd, Addison Wesley Longman 2012,Reference, 2nd, Addison Wesley Longman 2012,(uwzględnia standard C++11)(uwzględnia standard C++11)

Grębosz J.: Pasja C++, RM, W-waGrębosz J.: Pasja C++, RM, W-wa

Inne (wspomniane na pierwszym wykładzie o C++,Inne (wspomniane na pierwszym wykładzie o C++,w tym ANSI/ISO C++ standard)w tym ANSI/ISO C++ standard)

Page 7: Przestrzenie nazw, strumienie

Standardowe wejście/wyjście C++Standardowe wejście/wyjście C++

Biblioteka IOStream (iostream)Biblioteka IOStream (iostream) najstarsza część biblioteki standardowejnajstarsza część biblioteki standardowej opracowana przez AT&Topracowana przez AT&T

obsługa lokalizacjiobsługa lokalizacji obsługa typówobsługa typów

char * (zgodność z wczesnymi implementacjami)char * (zgodność z wczesnymi implementacjami) stringstring

iostream to biblioteka wzorców z obsługą sytuacji iostream to biblioteka wzorców z obsługą sytuacji wyjątkowychwyjątkowych

Page 8: Przestrzenie nazw, strumienie

Biblioteka IOStream – podstawyBiblioteka IOStream – podstawy

KlasyKlasy

strumień wejściowy strumień wejściowy istreamistream (wywiedziony ze (wywiedziony ze wzorca: basic_istream<char>) wzorca: basic_istream<char>)

strumień wyjściowy strumień wyjściowy ostreamostream (wywiedziony ze (wywiedziony ze wzorca: basic_ostream<char>)wzorca: basic_ostream<char>)

Page 9: Przestrzenie nazw, strumienie

Biblioteka IOStream – podstawyBiblioteka IOStream – podstawy

Obiekty (nagłówek: <iostream>Obiekty (nagłówek: <iostream>

istream istream cincin; ; //stdin , buforowany//stdin , buforowany

ostream ostream coutcout; ; //stdout, buforowany//stdout, buforowany

ostream ostream cerrcerr; ; //stderr, //stderr, niebuforowanyniebuforowany//skojarzony z konsolą//skojarzony z konsolą

ostream ostream clogclog; ; //bez odp. w C, buforowany//bez odp. w C, buforowany//skojarzony z konsolą//skojarzony z konsolą

Page 10: Przestrzenie nazw, strumienie

Biblioteka IOStream – podstawyBiblioteka IOStream – podstawy Operatory << i >>Operatory << i >>

przeciążone dla typów podstawowych, w tym char *, void *, bool,przeciążone dla typów podstawowych, w tym char *, void *, bool, można przeciążać dla własnych klas.można przeciążać dla własnych klas.

istream is; istream is; ostream os;ostream os;

int i; double d;int i; double d;

os<<i; os<<i; is>>i;is>>i;os<<d;os<<d; is>>d;is>>d;os<<i<<d;os<<i<<d; is>>i>>d;is>>i>>d;cout<<i<<d;cout<<i<<d; cin>>i>>d;cin>>i>>d;cout<< cout<< ""\n\ni wynosi i wynosi " " << i << << i << "" a d to a d to "" << d << << d << " " \n\n"";;

Page 11: Przestrzenie nazw, strumienie

Biblioteka IOStream – podstawyBiblioteka IOStream – podstawy Manipulatory Manipulatory

to są obiekty zdefiniowane aby modyfikować domyślne zachowanie to są obiekty zdefiniowane aby modyfikować domyślne zachowanie strumienia (np. formatowanie), wyprowadzić znak końca wiersza itp.strumienia (np. formatowanie), wyprowadzić znak końca wiersza itp.

programista może definiować własne manipulatoryprogramista może definiować własne manipulatory

endl endl //koniec wiersza i wyczyszczenie (flush()) bufora strumienia//koniec wiersza i wyczyszczenie (flush()) bufora strumienia

cout<< cout<< ""\n\ni wynosi i wynosi " " << i << << i << "" a d to a d to "" << d << endl; << d << endl;

endsends // // ""\0\0"";;wsws // dla istream pobierz (pomiń) białe znaki// dla istream pobierz (pomiń) białe znakiflushflushdec, hex, oct dec, hex, oct

Page 12: Przestrzenie nazw, strumienie

Biblioteka IOStream – szczegółyBiblioteka IOStream – szczegóły

ios_baseios_base

basic_streambuf<> basic_streambuf<>

basic_ios<>basic_ios<> virtualvirtual

basic_istream<>basic_istream<> basic_ostream<> basic_ostream<>

basic_iostream<>basic_iostream<>

Page 13: Przestrzenie nazw, strumienie

Biblioteka IOStream – szczegółyBiblioteka IOStream – szczegóły

ios_baseios_base

wspólny interfejs klas strumieni w zakresie wspólny interfejs klas strumieni w zakresie niezależnym od typu elementów strumienianiezależnym od typu elementów strumienia definicja stanu strumieniadefinicja stanu strumienia format przetwarzanych danycformat przetwarzanych danyc

Page 14: Przestrzenie nazw, strumienie

Biblioteka IOStream – szczegółyBiblioteka IOStream – szczegóły

basic_ios<>basic_ios<>

wspólny interfejs klas strumieni w zakresie wspólny interfejs klas strumieni w zakresie zależnym od typu elementów strumieniazależnym od typu elementów strumienia definicja bufora danych strumienia (klasa definicja bufora danych strumienia (klasa

pochodna wzorca basic_streambuf<> dla pochodna wzorca basic_streambuf<> dla konkretnego typu elementów strumienia, wraz z konkretnego typu elementów strumienia, wraz z definicjami operacji faktycznego odczytu/zapisu definicjami operacji faktycznego odczytu/zapisu danych)danych)

Page 15: Przestrzenie nazw, strumienie

Biblioteka IOStream – szczegółyBiblioteka IOStream – szczegóły

basic_istream<>basic_istream<>basic_ostream<>basic_ostream<>

wzorce obiektów odpowiednio tylko do wzorce obiektów odpowiednio tylko do odczytu/zapisuodczytu/zapisu dziedziczą dziedziczą wirtualniewirtualnie wzorzec basic_ios<> wzorzec basic_ios<> dla argumentu char wywiedzione są klasy dla argumentu char wywiedzione są klasy

odpowiednio istream i ostreamodpowiednio istream i ostream nagłówki odpowiednio <istream> i <ostream>nagłówki odpowiednio <istream> i <ostream>

Page 16: Przestrzenie nazw, strumienie

Biblioteka IOStream – szczegółyBiblioteka IOStream – szczegóły

basic_iostream<>basic_iostream<>

wzorce obiektów do odczytu i zapisuwzorce obiektów do odczytu i zapisu nagłówek <istream>nagłówek <istream>

Page 17: Przestrzenie nazw, strumienie

Biblioteka IOStream – szczegółyBiblioteka IOStream – szczegóły

rezultat operacji strumieniowychrezultat operacji strumieniowych stan strumienia (widoczny w zakresie klasy stan strumienia (widoczny w zakresie klasy

ios_base, stałe typu iostate)ios_base, stałe typu iostate) goodbitgoodbit // poprawny wynik operacji// poprawny wynik operacji // poniższe bity wyzerowane// poniższe bity wyzerowane eofbiteofbit // napotkano koniec (znak końca) pliku// napotkano koniec (znak końca) pliku failbitfailbit // operacja zakończona niepowodzeniem// operacja zakończona niepowodzeniem // kolejne też będą się kończyć // kolejne też będą się kończyć

niepow.niepow. // trzeba wyzerować failbit// trzeba wyzerować failbit badbitbadbit // niepowodzenie i uszkodzenie strumienia// niepowodzenie i uszkodzenie strumienia

Page 18: Przestrzenie nazw, strumienie

Biblioteka IOStream – szczegółyBiblioteka IOStream – szczegóły

rezultat operacji strumieniowych - metodyrezultat operacji strumieniowych - metody bool good()bool good() // poprawny wynik operacji// poprawny wynik operacji bool eof() bool eof() // napotkano koniec (znak końca) pliku// napotkano koniec (znak końca) pliku bool fail() bool fail() // operacja zakończona niepowodzeniem// operacja zakończona niepowodzeniem bool bad() bool bad() // niepowodzenie i uszkodzenie strumienia// niepowodzenie i uszkodzenie strumienia rdstate()rdstate() // odczytaj stan strumienia// odczytaj stan strumienia clear()clear() // ustaw na stan goodbit// ustaw na stan goodbit clear(state)clear(state) // ustaw na stan state// ustaw na stan state setstate(state)setstate(state) // ustaw znaczniki state, nie rusz // ustaw znaczniki state, nie rusz

// pozostałych// pozostałych

Page 19: Przestrzenie nazw, strumienie

Biblioteka IOStream – szczegółyBiblioteka IOStream – szczegóły rezultat operacji strumieniowych – operatory rezultat operacji strumieniowych – operatory

konwersjikonwersji operator void* ()operator void* () // odpowiednik !fail()// odpowiednik !fail()

if (cin>>x) if (cin>>x) // lub: while(cin>>x)// lub: while(cin>>x){ { // x odczytane poprawnie// x odczytane poprawnie}}

operator ! () operator ! () // odpowiednik fail()// odpowiednik fail()

if ( !!(cin>>x)) if ( !!(cin>>x)) // lub: while( !!(cin>>x))// lub: while( !!(cin>>x)){ { // x odczytane poprawnie// x odczytane poprawnie}}

Page 20: Przestrzenie nazw, strumienie

Biblioteka IOStream – szczegółyBiblioteka IOStream – szczegóły rezultat operacji strumieniowych – generowanie rezultat operacji strumieniowych – generowanie

wyjątkówwyjątków definicja błędnych sytuacji powodujących zgłoszenie definicja błędnych sytuacji powodujących zgłoszenie

wyjątku (metoda klasy strumienia):wyjątku (metoda klasy strumienia):

exceptions(flags)exceptions(flags)

sprawdzenie błędnych sytuacji powodujących zgłoszenie sprawdzenie błędnych sytuacji powodujących zgłoszenie wyjątku (metoda klasy strumienia):wyjątku (metoda klasy strumienia):

exceptions() exceptions()

jeżeli zwrócona wartość ==goodbit, to wyjątki nie są generowanejeżeli zwrócona wartość ==goodbit, to wyjątki nie są generowane

Page 21: Przestrzenie nazw, strumienie

Biblioteka IOStream – szczegółyBiblioteka IOStream – szczegóły

i/o formatowane a nieformatowanei/o formatowane a nieformatowane

operatory << i >> operatory << i >> domyślniedomyślnie obsługują i/o obsługują i/o formatowane (określona precyzja, pomijanie formatowane (określona precyzja, pomijanie białych znaków itp.)białych znaków itp.)

metody get*/put*/read*/write* i in. obsługują i/o metody get*/put*/read*/write* i in. obsługują i/o nieformatowanenieformatowane

Page 22: Przestrzenie nazw, strumienie

Biblioteka IOStream – szczegółyBiblioteka IOStream – szczegóły

i/o formatowanei/o formatowane metody dla znaczników formatu (ios::fmtflags)metody dla znaczników formatu (ios::fmtflags)

setf(flags);setf(flags); // ustaw znacznik(i) flags// ustaw znacznik(i) flags setiosflags(flags);setiosflags(flags); // odpowiednik setf(flags);// odpowiednik setf(flags); setf(flags, mask);setf(flags, mask); // ustaw znacznik(i) flags w grupie mask// ustaw znacznik(i) flags w grupie mask resetiosflags(mask);resetiosflags(mask); // odpowiednik setiosflags(0, mask);// odpowiednik setiosflags(0, mask); unsetf(flags);unsetf(flags); // wyczyść znacznik(i) flags// wyczyść znacznik(i) flags flags();flags(); // zwróć aktualne znacznik(i) flags// zwróć aktualne znacznik(i) flags flags(flags);flags(flags); // ustaw znaczniki flags, wyzeruj // ustaw znaczniki flags, wyzeruj

pozosałepozosałe copyfmt(stream)copyfmt(stream) // kopiuj znaczniki ze strumienia stream// kopiuj znaczniki ze strumienia stream

Page 23: Przestrzenie nazw, strumienie

Biblioteka IOStream – szczegółyBiblioteka IOStream – szczegóły i/o formatowane - i/o formatowane -

znaczniki i maski znaczniki i maski boolalphaboolalpha // znacznik: typ bool liczbowy (0/1) czy opisowy// znacznik: typ bool liczbowy (0/1) czy opisowy // true/false// true/false

// zdefiniowano również manipulatory boolalpha i noboolalpha// zdefiniowano również manipulatory boolalpha i noboolalpha

adjustfieldadjustfield // maska: wyrównanie (left, right, internal)// maska: wyrównanie (left, right, internal) leftleft // znacznik: wyrównanie do lewej// znacznik: wyrównanie do lewej rightright // znacznik: wyrównanie do prawej// znacznik: wyrównanie do prawej internalinternal // znacznik: wyrównanie znaku liczby do lewej// znacznik: wyrównanie znaku liczby do lewej // reszta wartości do prawej// reszta wartości do prawej

// zdefiniowano również manipulatory left, right i internal// zdefiniowano również manipulatory left, right i internal

Page 24: Przestrzenie nazw, strumienie

Biblioteka IOStream – szczegółyBiblioteka IOStream – szczegóły i/o formatowane - i/o formatowane -

znaczniki i maski znaczniki i maski showposshowpos // poprzedź liczby dodatnie znakiem „+”// poprzedź liczby dodatnie znakiem „+”

// zdefiniowano również manipulatory showpos i noshowpos // zdefiniowano również manipulatory showpos i noshowpos

uppercaseuppercase // liczby szcesnastkowe pisz dużymi literami// liczby szcesnastkowe pisz dużymi literami// zdefiniowano również manipulatory uppercase i nouppercase // zdefiniowano również manipulatory uppercase i nouppercase

basefieldbasefield // maska: podstawa systemu liczbowego// maska: podstawa systemu liczbowego dec, hex octdec, hex oct // znaczniki systemu liczbowego// znaczniki systemu liczbowego (pusty)(pusty) // znacznik: zapisuj dziesiętnie, odczytuj zgodnie// znacznik: zapisuj dziesiętnie, odczytuj zgodnie // z prefiksem liczby 0x – hex, 0 – oct, // z prefiksem liczby 0x – hex, 0 – oct,

else: decelse: dec// zdefiniowano również manipulatory dec hex i oct // zdefiniowano również manipulatory dec hex i oct

Page 25: Przestrzenie nazw, strumienie

Biblioteka IOStream – szczegółyBiblioteka IOStream – szczegóły i/o formatowane - i/o formatowane -

znaczniki i maski znaczniki i maski showbaseshowbase // wyprowadź prefiks liczby dla systemu liczbowego// wyprowadź prefiks liczby dla systemu liczbowego

// zdefiniowano również manipulatory showbase i noshowbase// zdefiniowano również manipulatory showbase i noshowbase

floatfieldfloatfield // maska: format zmiennego przecinka// maska: format zmiennego przecinka fixedfixed // ułamek dziesiętny// ułamek dziesiętny scientificscientific // z wykładnikiem// z wykładnikiem (pusty)(pusty) // wybierz sam najlepszy// wybierz sam najlepszy

// zdefiniowano również manipulatory fixed i scientific// zdefiniowano również manipulatory fixed i scientific

showpointshowpoint // dla liczby zmiennoprzecinkowej zawsze // dla liczby zmiennoprzecinkowej zawsze // wyprowaź kropkę// wyprowaź kropkę

// zdefiniowano również manipulatory showpoint i noshowpoint// zdefiniowano również manipulatory showpoint i noshowpoint

Page 26: Przestrzenie nazw, strumienie

Biblioteka IOStream – szczegółyBiblioteka IOStream – szczegóły

i/o formatowanei/o formatowane precision()precision() // zwróć dokładność dla liczb// zwróć dokładność dla liczb

// zmiennorzecinkowych, // zmiennorzecinkowych,

// domyślnie 6 miejsc po // domyślnie 6 miejsc po przecinkuprzecinku

precision(p)precision(p) // ustaw dokładność dla liczb// ustaw dokładność dla liczb

// zmiennorzecinkowych// zmiennorzecinkowych

// jest również manipulator // jest również manipulator setprecision(w)setprecision(w)

Page 27: Przestrzenie nazw, strumienie

Biblioteka IOStream – szczegółyBiblioteka IOStream – szczegóły i/o formatowane - i/o formatowane -

znacznikiznaczniki skipwsskipws // pomijaj białe znaki// pomijaj białe znaki

// zdefiniowano również manipulatory skipws i noskipws// zdefiniowano również manipulatory skipws i noskipws

unitbufunitbuf // opróżnij bufor wyjściowy // opróżnij bufor wyjściowy // po każdym <<// po każdym <<

// zdefiniowano również manipulatory unitbuf i nounitbuf// zdefiniowano również manipulatory unitbuf i nounitbuf

Page 28: Przestrzenie nazw, strumienie

Biblioteka IOStream – szczegółyBiblioteka IOStream – szczegóły

i/o formatowanei/o formatowane width()width() // zwróć szerokość pola (liczba znaków)// zwróć szerokość pola (liczba znaków) // znaczy: nie mniej niż// znaczy: nie mniej niż width(w)width(w) // ustaw szerokość pola (liczba znaków)// ustaw szerokość pola (liczba znaków) // znaczy: nie mniej niż// znaczy: nie mniej niż

// jest również manipulator setw(w)// jest również manipulator setw(w)

char buf[80];char buf[80];cin >> setw(sizeof(buffer)) >> buffer;cin >> setw(sizeof(buffer)) >> buffer;

fill() fill() // zwróć znak dopelniajacy pole// zwróć znak dopelniajacy pole fill(c) fill(c) // ustaw znak dopelniajacy pole// ustaw znak dopelniajacy pole

// jest również manipulator setfill(c)// jest również manipulator setfill(c)

Page 29: Przestrzenie nazw, strumienie

Biblioteka IOStream – szczegółyBiblioteka IOStream – szczegóły

i/o formatowanei/o formatowane metody dla lokalizacji programów, znaków metody dla lokalizacji programów, znaków

międzynarodowych, itp.międzynarodowych, itp. są … opisane w dokumentacji ;-)są … opisane w dokumentacji ;-)

Page 30: Przestrzenie nazw, strumienie

Biblioteka IOStream – szczegółyBiblioteka IOStream – szczegóły

i/o nieformatowanei/o nieformatowane metoda getmetoda get

int get();int get(); // odczytaj jeden znak, lub EOF// odczytaj jeden znak, lub EOF // odpowiednik getchar()/getc()// odpowiednik getchar()/getc()

istream& get(char &c);istream& get(char &c); // nie ma EOF, jest stan str.// nie ma EOF, jest stan str. istream& get(char *pc, streamsize cnt)istream& get(char *pc, streamsize cnt) istream& get(char *pc, streamsize cnt, char delim)istream& get(char *pc, streamsize cnt, char delim) // wczytaj do bufora pc, zatrzymaj się po przeczytaniu// wczytaj do bufora pc, zatrzymaj się po przeczytaniu // cnt-1 znaków, lub napotkaniu znaku delim// cnt-1 znaków, lub napotkaniu znaku delim // nie odczytuj delim, dopisz do bufora ‘\0’// nie odczytuj delim, dopisz do bufora ‘\0’ istream& ignore(streamsize cnt, char delim) istream& ignore(streamsize cnt, char delim) // kilka wariantów, pobierz ale nie zapisuj// kilka wariantów, pobierz ale nie zapisuj

Page 31: Przestrzenie nazw, strumienie

Biblioteka IOStream – szczegółyBiblioteka IOStream – szczegóły

i/o nieformatowanei/o nieformatowane metoda getlinemetoda getline

istream& getline(char *pc, streamsize cnt)istream& getline(char *pc, streamsize cnt) istream& getline(char *pc, streamsize cnt, char delim)istream& getline(char *pc, streamsize cnt, char delim) // wczytaj do bufora pc, zatrzymaj się po przeczytaniu// wczytaj do bufora pc, zatrzymaj się po przeczytaniu // cnt-1 znaków, lub napotkaniu odpowiednio// cnt-1 znaków, lub napotkaniu odpowiednio // konca wiersza lub znaku delim// konca wiersza lub znaku delim // delim // delim jestjest odczytywany ze strumienia odczytywany ze strumienia

// jeżeli odczytano mniej niż cnt znaków to ustaw failbit// jeżeli odczytano mniej niż cnt znaków to ustaw failbit

Page 32: Przestrzenie nazw, strumienie

Biblioteka IOStream – szczegółyBiblioteka IOStream – szczegóły

i/o nieformatowanei/o nieformatowane metody read i readsome – wybrane aspektymetody read i readsome – wybrane aspekty

istream& read(char *pc, streamsize cnt)istream& read(char *pc, streamsize cnt)

// odczytaj cnt znaków// odczytaj cnt znaków

streamsize readsome(char *pc, streamsize cnt)streamsize readsome(char *pc, streamsize cnt)

// zwróć liczbę przeczytanych znaków,// zwróć liczbę przeczytanych znaków,

// odczytaj nie więcej niż cnt-1 znaków// odczytaj nie więcej niż cnt-1 znaków

// // pobierz tylko te znaki, które już są w buforze pobierz tylko te znaki, które już są w buforze (niedestrukcyjne)(niedestrukcyjne)

Page 33: Przestrzenie nazw, strumienie

Biblioteka IOStream – szczegółyBiblioteka IOStream – szczegóły i/o nieformatowanei/o nieformatowane

int peek(char *pc, streamsize cnt)int peek(char *pc, streamsize cnt) // odczytaj następny znak, ale nie pobieraj go z bufora// odczytaj następny znak, ale nie pobieraj go z bufora

istream& unget()istream& unget() // zwróć ostatnio odczytany znak// zwróć ostatnio odczytany znak // zależnie od implementacji zadziała 1 lub wiecej// zależnie od implementacji zadziała 1 lub wiecej

// razy pod rząd// razy pod rząd// jeżeli nie powiedzie się to ustaw badbit// jeżeli nie powiedzie się to ustaw badbit

istream& putback(char c)istream& putback(char c) // j.w., ale jeżeli c nie jest ostatnio pobranym znakiem // j.w., ale jeżeli c nie jest ostatnio pobranym znakiem

// to ustaw badbit// to ustaw badbit

Page 34: Przestrzenie nazw, strumienie

Biblioteka IOStream – szczegółyBiblioteka IOStream – szczegóły

i/o nieformatowanei/o nieformatowane

ostream& put(char c)ostream& put(char c) // zapisz c do strumienia// zapisz c do strumienia

ostream& write(const char *pc, streamsize cnt)ostream& write(const char *pc, streamsize cnt) // zapisz cnt znakow od adresu pc do strumienia// zapisz cnt znakow od adresu pc do strumienia // nie dopisuj (automatycznie) \0// nie dopisuj (automatycznie) \0

ostream& flush()ostream& flush()

Page 35: Przestrzenie nazw, strumienie

Biblioteka IOStream – podstawyBiblioteka IOStream – podstawy

Klasy strumieni plikowychKlasy strumieni plikowych strumień wejściowy strumień wejściowy ifstreamifstream (wywiedziony ze (wywiedziony ze

wzorca: basic_ifstream<char> /pochodny wzorca: basic_ifstream<char> /pochodny basic_istream<char> /) basic_istream<char> /)

strumień wyjściowy strumień wyjściowy ofstreamofstream (wywiedziony ze (wywiedziony ze wzorca: basic_ofstream<char> /pochodny wzorca: basic_ofstream<char> /pochodny basic_ostream<char> /)basic_ostream<char> /)

strumień we/wy strumień we/wy fstreamfstream (wywiedziony ze wzorca: (wywiedziony ze wzorca: basic_fstream<char> /pochodny basic_fstream<char> /pochodny basic_iostream<char> /)basic_iostream<char> /)

Page 36: Przestrzenie nazw, strumienie

Biblioteka IOStream – podstawyBiblioteka IOStream – podstawy

int i;int i;

ifstream plikwe(„plik.txt”);ifstream plikwe(„plik.txt”);

if (!plikwe)if (!plikwe)

cout<<„nie otworzylem pliku”;cout<<„nie otworzylem pliku”;

elseelse

plikwe>>i;plikwe>>i;

Page 37: Przestrzenie nazw, strumienie

Biblioteka IOStream – podstawyBiblioteka IOStream – podstawy

Znaczniki dla plików (widoczne w zakresie std::ios)Znaczniki dla plików (widoczne w zakresie std::ios) argumenty konstruktora: fstream(nazwa, znaczniki=def)argumenty konstruktora: fstream(nazwa, znaczniki=def)

inin // znacznik: strumień wejściowy domyślny dla ifstream// znacznik: strumień wejściowy domyślny dla ifstream outout // znacznik: strumień wyjściowy domyślny dla // znacznik: strumień wyjściowy domyślny dla

ofstreamofstream appapp // z.: dla pliku wyjściowego ustaw się na końcu pliku// z.: dla pliku wyjściowego ustaw się na końcu pliku ateate // z.: ustaw się na końcu pliku// z.: ustaw się na końcu pliku outout // z.: usuń zawartość pliku (jeżeli niepusty)// z.: usuń zawartość pliku (jeżeli niepusty) binarybinary // z.: tryb binarny (nie tłumacz CR LF)// z.: tryb binarny (nie tłumacz CR LF)

ifstream ibin(„data.bin”, std::ios::in ifstream ibin(„data.bin”, std::ios::in || std::ios::binary); std::ios::binary);

Page 38: Przestrzenie nazw, strumienie

Biblioteka IOStream – podstawyBiblioteka IOStream – podstawy

Metody dla strumieni plikowychMetody dla strumieni plikowych openopen // ( nazwa_pliku [, znaczniki] )// ( nazwa_pliku [, znaczniki] ) closeclose // ()// () is_openis_open // czy skojarzony z otwartym plikiem?// czy skojarzony z otwartym plikiem? tellg/tellptellg/tellp // pobierz aktualną pozycją odczytu/zapisu// pobierz aktualną pozycją odczytu/zapisu seekg/seekpseekg/seekp // seek dla odczytu/zapisu, // seek dla odczytu/zapisu, // przeciążone wersje: poz. // przeciążone wersje: poz.

względna/bezwzględnawzględna/bezwzględna

ifstream ibin(„data.bin”, std::ios::in ifstream ibin(„data.bin”, std::ios::in || std::ios::binary); std::ios::binary);

Page 39: Przestrzenie nazw, strumienie

Biblioteka IOStream – szczegółyBiblioteka IOStream – szczegóły

Klasy strumieni plikowychKlasy strumieni plikowych szczegóły są opisane w dokumentacji … ;-) szczegóły są opisane w dokumentacji … ;-)

Page 40: Przestrzenie nazw, strumienie

Biblioteka IOStream – podstawyBiblioteka IOStream – podstawy

Klasy strumieni pamięciowych (łańcuchowych)Klasy strumieni pamięciowych (łańcuchowych) strumień wejściowy strumień wejściowy istringstreamistringstream (wywiedziony ze (wywiedziony ze

wzorca: basic_istringstream<char> /pochodny wzorca: basic_istringstream<char> /pochodny basic_istream<char> /) basic_istream<char> /)

strumień wyjściowy strumień wyjściowy ostringstreamostringstream (wywiedziony ze (wywiedziony ze wzorca: basic_ostringstream<char> /pochodny wzorca: basic_ostringstream<char> /pochodny basic_ostream<char> /)basic_ostream<char> /)

strumień we/wy strumień we/wy stringstreamstringstream (wywiedziony ze wzorca: (wywiedziony ze wzorca: basic_stringstream<char> /pochodny basic_iostream<char> basic_stringstream<char> /pochodny basic_iostream<char> /)/)

Page 41: Przestrzenie nazw, strumienie

Biblioteka IOStream – szczegółyBiblioteka IOStream – szczegóły

Klasy strumieni pamięciowychKlasy strumieni pamięciowych szczegóły są opisane w dokumentacji … ;-) szczegóły są opisane w dokumentacji … ;-)