Sunteți pe pagina 1din 61

Universitatea Constantin Brncui din Trgu-Jiu Facultatea de Inginerie Departamentul de Automatic, Energie i Mediu

Programare orientat pe obiecte


LECTOR ADRIAN RUNCEANU

Curs 11
Sistemul de intrare / ieire n C++

Curs - Programare orientata pe obiecte C++/Java

27.11.2012

Sistemul de intrare/ieire n C++


3

1. Funcii de I/O pentru tipurile predefinite 2. Funcii de I/O pentru tipuri definite de utilizator 3. Starea streamurilor 4. Formatarea I/O 4.1. Formatarea I/O folosind membrii clasei ios 4.2. Formatarea I/O folosind manipulatori

Curs - Programare orientata pe obiecte C++/Java

27.11.2012

Sistemul de intrare/ieire n C++


4

Sistemul de intrare/ieire (I/O) din C poate fi folosit si in C++, dar mai este definit nc un sistem complet integrat, care permite operarea cu obiecte de tipuri definite de utilizatori. Ca i sistemul I/O din C, cel din C++ opereaz prin stream-uri (fluxuri). Un stream este o entitate logic n care se introduc (se insereaz) sau din care se extrag informaii. Toate streamurile se comport n mod asemntor, chiar dac echipamentele fizice la care sunt conectate pot s difere substanial.
Curs - Programare orientata pe obiecte C++/Java

27.11.2012

Sistemul de intrare/ieire n C++


5

Fiierul antet iostream.h definete interfaa cu biblioteca de stream-uri prin mai multe clase i funcii. Clasa de nivel cel mai mic este clasa streambuf, care definete operaiile de baz de I/O. Cu excepia situaiilor n care se doresc propriile clase de I/O, nu se deriveaz direct din clasa streambuf, ci din clasa din al doilea nivel de ierarhie, numit clasa ios.
Curs - Programare orientata pe obiecte C++/Java

27.11.2012

Sistemul de intrare/ieire n C++


6

Clasa ios accept I/O formatate i din ea sunt derivate clasele: 1. istream - pentru stream-uri de intrare 2. ostream - pentru stream-uri de ieire 3. iostream - pentru stream-uri intrare/ieire precum i alte clase pentru utilizarea fiierelor pe disc i formatarea n memorie.

Curs - Programare orientata pe obiecte C++/Java

27.11.2012

Sistemul de intrare/ieire n C++


7

La nceperea execuiei unui program C++, n mod automat se deschid patru stream-uri standard ncorporate. Aceste stream-uri sunt: 1. cin Intrare standard Tastatur 2. cout Ieire standard Ecran 3. cerr Ieire standard pentru eroare Ecran 4. clog Versiune cu buffer de memorie pentru cerr Ecran Stream-urile cin, cout i cerr corespund stream-urilor stdin, stdout i stderr din C.
Curs - Programare orientata pe obiecte C++/Java

27.11.2012

Sistemul de intrare/ieire n C++


8

1. Funcii de I/O pentru tipurile predefinite 2. Funcii de I/O pentru tipuri definite de utilizator 3. Starea streamurilor 4. Formatarea I/O 4.1. Formatarea I/O folosind membrii clasei ios 4.2. Formatarea I/O folosind manipulatori

Curs - Programare orientata pe obiecte C++/Java

27.11.2012

1. Funcii de I/O pentru tipurile predefinite


9

Operaiile de I/O din C++ se efectueaz folosind funciile: 1. operator de inserie << 2. operator de extragere >>
Stream-urile pot fi considerate ca recipieni de caractere aranjate ntr-o anumit ordine n care se introduc i din care se extrag date.
Curs - Programare orientata pe obiecte C++/Java

27.11.2012

1. Funcii de I/O pentru tipurile predefinite


10

Funciile de operare asupra stream-urilor

specific modul n care se execut conversia ntre un ir de caractere din stream i o variabil de un anumit tip. Aceste funcii operator sunt definite n clasa ostream, respectiv istream, pentru toate tipurile predefinite ale limbajului, iar pentru tipurile definite de utilizator ele pot fi suprancrcate.
Curs - Programare orientata pe obiecte C++/Java

27.11.2012

1. Funcii de I/O pentru tipurile predefinite


11

De exemplu, n clasa ostream sunt definite funcii operator de inserie << astfel:

class ostream : public virtual ios { // ... public: ostream& operator << (const char*); // iruri de caractere ostream& operator << (char); ostream& operator << (short); ostream& operator << (int); ostream& operator << (long); ostream& operator << (double); ostream& operator << (const void*); // pointeri
//

};
Curs - Programare orientata pe obiecte C++/Java

27.11.2012

1. Funcii de I/O pentru tipurile predefinite


12

n clasa istream sunt definite funcii operator de extracie >> astfel: class istream : public virtual ios { // ... public: istream& operator >> (char*); // iruri de caractere istream& operator >> (char&); istream& operator >> (short&); istream& operator >> (int&); istream& operator >> (long&); istream& operator >> (double&);
//

};
Curs - Programare orientata pe obiecte C++/Java

27.11.2012

1. Funcii de I/O pentru tipurile predefinite


13

Exemplul 1:

Funcia de citire de la consol a unei secvene de numere ntregi separate prin spaii albe (whitespace adic unul din caracterele blanc, tab, newline, carriage return, formfeed) poate arta astfel:

Curs - Programare orientata pe obiecte C++/Java

27.11.2012

1. Funcii de I/O pentru tipurile predefinite


14

void fint(){ int size = 10; int array[10]; for(int i=0;i<size;i++){ if (cin >> array[i]) cout << array[i] << " "; else { cout << "eroare non-int"; break; } } }
Curs - Programare orientata pe obiecte C++/Java

27.11.2012

1. Funcii de I/O pentru tipurile predefinite


15

O intrare diferit de numr ntreg va cauza eroare n operaia de citire i deci oprirea buclei for. De exemplu, dac se introduc valorile: 1 2 3 4.7 5 6 7 8 9 0 11 funcia fint() va citi primele patru numere, dup care apare eroare n operaia de intrare, citirea numerelor ntregi se ntrerupe i pe ecran apare mesajul: 1 2 3 4 eroare non-int Caracterul punct este lsat n streamul de intrare, ca urmtor caracter de citit.
Curs - Programare orientata pe obiecte C++/Java

27.11.2012

1. Funcii de I/O pentru tipurile predefinite


16

O alt soluie pentru citirea unei secvene de intrare este folosirea uneia din funciile get() definite n clasa iostream astfel: class istream : public virtual ios { // istream& get(char& c); istream& get(char* p, int n, char ch=\n); };

Curs - Programare orientata pe obiecte C++/Java

27.11.2012

1. Funcii de I/O pentru tipurile predefinite


17

Aceste funcii trateaz spaiile albe la fel ca pe toate

celelalte caractere. Funcia get(char& c) citete un singur caracter n argumentul c. De exemplu, o funcie fg() de copiere caracter cu caracter de la intrare (streamul cin) la ieire (streamul cout) poate arta astfel: void fg() { char c; while(cin.get(c)) cout << c; }
Curs - Programare orientata pe obiecte C++/Java

27.11.2012

1. Funcii de I/O pentru tipurile predefinite


18

n locul funciei operator << se poate folosi funcia put() pentru scrierea ntr-un stream de intrare, astfel nct funcia fg() se poate rescrie astfel: void fg() { char c; while(cin.get(c)) cout.put(c); }

Curs - Programare orientata pe obiecte C++/Java

27.11.2012

1. Funcii de I/O pentru tipurile predefinite


19

istream& get(char* p, int n, char ch=\n);


Funcia cu trei argumente istream::get() citete cel

mult n1 caractere ntr-un tablou de caractere care ncepe la adresa p i introduce, ca ultim caracter n tablou, caracterul 0.
Cel

de-al treilea argument specific caracterul terminator al citirii, implicit caracterul newline (\n), care este lsat ca primul caracter necitit n stream.
27.11.2012

Curs - Programare orientata pe obiecte C++/Java

1. Funcii de I/O pentru tipurile predefinite


20

O utilizare tipic a funciei get() cu trei argumente este citirea unei linii de intrare ntr-un buffer de dimensiune fix, pentru o analiz ulterioar. De exemplu: void fbuf() { char buf[100]; cin >> buf; // operaie suspect, pot aparea erori cin.get(buf,100,'\n'); // citire sigur }
Curs - Programare orientata pe obiecte C++/Java

27.11.2012

Sistemul de intrare/ieire n C++


21

1. Funcii de I/O pentru tipurile predefinite 2. Funcii de I/O pentru tipuri definite de utilizator 3. Starea streamurilor 4. Formatarea I/O 4.1. Formatarea I/O folosind membrii clasei ios 4.2. Formatarea I/O folosind manipulatori

Curs - Programare orientata pe obiecte C++/Java

27.11.2012

2. Funcii de I/O pentru tipuri definite de utilizator 22


Funciile de I/O pentru tipuri definite de utilizator se obin prin suprancrcarea operatorilor de inserie i de extragere, care au urmtoarea form general: ostream& operator<<(ostream& os, tip_clasa nume) {
// corpul functiei

return os;
} istream& operator>>(istream& is, tip_clasa& nume) {
// corpul functiei

return is; }
Curs - Programare orientata pe obiecte C++/Java

27.11.2012

2. Funcii de I/O pentru tipuri definite de utilizator


23

Primul argument al funciei este o referin la

streamul de ieire, respectiv de intrare. Pentru funcia operator de extragere << al doilea argument este dat printr-o referin la obiectul care trebuie s fie extras din stream; n aceast referin sunt nscrise datele extrase din streamul de intrare. Pentru funcia operator de inserie >> al doilea argument este dat prin tipul i numele obiectului care trebuie s fie inserat, sau printr-o referin la acesta. Funciile operator de inserie i extracie returneaz o referin la streamul pentru care au fost apelate, astfel nct o alt operaie de I/O poate fi adugat acestuia.
Curs - Programare orientata pe obiecte C++/Java

27.11.2012

2. Funcii de I/O pentru tipuri definite de utilizator


24

Funciile operator << sau >> nu sunt membre ale

clasei pentru care au fost definite, dar pot (i este recomandabil) s fie declarate funcii friend n clasa respectiv. Motivul pentru care o funcie operator << sau >> nu poate fi membr a unei clase este simplu de observat:

atunci cnd o funcie operator de orice fel este membru al unei clase, operandul din stnga, care este un obiect din clasa respectiv, este cel care genereaz apelul i transmite implicit funciei pointerul this.

Ori, n

cazul funciilor operator << sau >> operandul din stnga trebuie s fie un stream, nu un obiect din clasa respectiv, deci aceste funcii nu pot fi funcii membre ale claselor.
27.11.2012

Curs - Programare orientata pe obiecte C++/Java

2. Funcii de I/O pentru tipuri definite de utilizator


25

Exemplu 1: Ca exemple de suprancrcare a funciilor operator << i >>, se reiau clasele definite n cursurile precedente, Complex i String, crora li se adaug aceste funcii.

class Complex { double x, y; public: Complex(){x = 0; y = 0} Complex(double r, double i){x = r; y = i; }


// ..

friend ostream& operator << (ostream& os, Complex z); friend istream& operator >>(istream& is, Complex& z); Curs - Programare orientata pe obiecte C++/Java 27.11.2012 };

2. Funcii de I/O pentru tipuri definite de utilizator


26

ostream& operator<<(ostream& os, Complex z) { os << ( << z.x << ,<< z.y << ); return os; }
istream& operator>>(istream& is, Complex& z) { is >> z.x >> z.y; return is; }
Curs - Programare orientata pe obiecte C++/Java

27.11.2012

2. Funcii de I/O pentru tipuri definite de utilizator


27

class String { char *str; int size; public:


//.

friend ostream& operator <<(ostream& stream, const String &r); friend istream& operator >>(istream& stream, String &r); };
Curs - Programare orientata pe obiecte C++/Java

27.11.2012

2. Funcii de I/O pentru tipuri definite de utilizator


28

ostream& operator <<(ostream &stream, const String &r) { stream << r.str; return stream; } istream& operator >>(istream &stream, String &r) { char buf[256]; stream.get(buf,256); r = buf; return stream; }Curs - Programare orientata pe obiecte C++/Java 27.11.2012

2. Funcii de I/O pentru tipuri definite de utilizator


29

Exemplul 2: Fie funcia fc() n care se citesc de la consol un numr complex (de tip Complex) i un sir (de tip sir de caractere) care apoi sunt afiate pe ecran void fc() { Complex z; cout << "Introduceti x, y :"; cin >> z; cout << "z = " << z << '\n'; cin.get(); int size = 10; char buf[] = "9999999999"; cout << "Introduceti un sir:"; cin.get(buf,size,'\n'); for (int i=0;i<size;i++) cout << buf[i]; }
Curs - Programare orientata pe obiecte C++/Java

27.11.2012

2. Funcii de I/O pentru tipuri definite de utilizator


30

Execuia acestei funcii produce urmtoarele mesaje la consol: Introduceti x, y: 1.3 4.5 z = (1.3,4.5) Introduceti un sir:123456 123456

Curs - Programare orientata pe obiecte C++/Java

27.11.2012

Sistemul de intrare/ieire n C++


31

1. Funcii de I/O pentru tipurile predefinite 2. Funcii de I/O pentru tipuri definite de utilizator 3. Starea streamurilor 4. Formatarea I/O 4.1. Formatarea I/O folosind membrii clasei ios 4.2. Formatarea I/O folosind manipulatori

Curs - Programare orientata pe obiecte C++/Java

27.11.2012

3. Starea streamurilor
32

Fiecare stream (istream sau ostream) are

asociat o stare, memorat ntr-un ntreg n clasa ios, iar condiiile nestandard sau erorile aprute n operaiile cu acesta pot fi setate sau testate folosind operaii publice ale clasei de baz ios. Valorile folosite pentru descrierea strii unui stream i funciile de testare a strii definite n clasa de baz ios sunt urmtoarele:
Curs - Programare orientata pe obiecte C++/Java

27.11.2012

3. Starea streamurilor
33

class ios {
// public: enum io_state { goodbit=0, eofbit=1, failbit=2, badbit=4 }; int rdstate() const; int good() const; int eof() const; int fail() const; int bad() const;

};
Curs - Programare orientata pe obiecte C++/Java

27.11.2012

3. Starea streamurilor
34

Funcia rdstate() returneaz 0 dac nu a aprut nici o

eroare i nici nu a fost ntlnit indicatorul de sfrit al streamului (end of file, eof). Fiecare stare n parte poate fi obinut i prin apelul uneia din funciile good(), eof(), fail() sau bad(). Dac starea este good() sau eof(), operaia precedent s-a desfurat cu succes. Aplicarea unei operaii de inserie ntr-un stream care nu se afl n starea good() este o operaie nul i nu modific streamul. O operaie de extragere a unor date dintr-un stream care cauzeaz starea fail() las, n general, nemodificat variabila n care urma s aib loc nscrierea.
Curs - Programare orientata pe obiecte C++/Java

27.11.2012

3. Starea streamurilor
35

Atunci cnd un stream este utilizat ntr-o operaie de

testare (ca de exemplu, n expresiile deja utilizate mai sus: while(cin.get(c))) este testat starea streamului i testul returneaz valoarea 0 dac este setat unul din biii failbit sau badbit.
Aceast

operaie de testare este posibil prin conversia unui stream ntr-un pointer, executat de funcia suprancarcat operator de conversie a clasei ios:

operator void*() const;


Curs - Programare orientata pe obiecte C++/Java

27.11.2012

Sistemul de intrare/ieire n C++


36

1. Funcii de I/O pentru tipurile predefinite 2. Funcii de I/O pentru tipuri definite de utilizator 3. Starea streamurilor 4. Formatarea I/O 4.1. Formatarea I/O folosind membrii clasei ios 4.2. Formatarea I/O folosind manipulatori

Curs - Programare orientata pe obiecte C++/Java

27.11.2012

4. Formatarea I/O
37

n exemplele prezentate pn acum au fost

folosite operaii de I/O neformatate, n care transformarea unui obiect ntr-o secven de caractere a fost executat conform unor reguli implicite.
diferite de cele implicite pentru operaiile de intrare i de ieire, n mod asemntor cu formatele introduse prin funciile printf() i scanf() din limbajul C.
27.11.2012

n limbajul C++ se pot specifica formate

Curs - Programare orientata pe obiecte C++/Java

4. Formatarea I/O
38

Exist dou posibiliti de formatare a datelor n limbajul C++. 1. Prima posibilitate este cea oferit de accesul la variabilele i funciile membre ale clasei de baz ios care se refer la formatarea datelor. 2. Cea de-a doua posibilitate o reprezint utilizarea unor funcii speciale, numite manipulatori, care pot fi incluse n operaii (expresii) de I/O.
Curs - Programare orientata pe obiecte C++/Java

27.11.2012

Sistemul de intrare/ieire n C++


39

1. Funcii de I/O pentru tipurile predefinite 2. Funcii de I/O pentru tipuri definite de utilizator 3. Starea streamurilor 4. Formatarea I/O 4.1. Formatarea I/O folosind membrii clasei ios 4.2. Formatarea I/O folosind manipulatori

Curs - Programare orientata pe obiecte C++/Java

27.11.2012

4.1. Formatarea I/O folosind membrii clasei ios


40

Clasa ios controleaz conexiunea dintre un stream i buffer-ul utilizat pentru operaiile de intrare i de ieire, avnd astfel posibilitatea de a specifica modul n care sunt introduse sau extrase caracterele.

Curs - Programare orientata pe obiecte C++/Java

27.11.2012

4.1. Formatarea I/O folosind membrii clasei ios


41

Clasa ios conine date membre care memoreaz informaii despre:


baza de numeraie folosit (zecimal, octal,

hexazecimal) despre precizia cu care se scriu sau se citesc numerele n virgul mobil, etc. precum i funcii care permit setarea sau examinarea acestora pentru fiecare stream
Curs - Programare orientata pe obiecte C++/Java

27.11.2012

4.1. Formatarea I/O folosind membrii clasei ios


42

Flagurile (indicatorii) de formatare din clasa ios i funciile de acces la acetia sunt: class ios { public: // flaguri (indicatori) de formatare enum { skips=0x00001, // ignor spaii la intrare left=0x00002, // completare dup valoare right=0x00004, // completare nainte de valoare internal=0x0008, // completare format intern dec=0x0010, // zecimal oct=0x0020, // octal hex=0x0040, // hexazecimal
Curs - Programare orientata pe obiecte C++/Java

27.11.2012

4.1. Formatarea I/O folosind membrii clasei ios


43

(continuare) showbase=0x080, showpoint=0x0100, uppercase=0x0200, showpos=0x0400, scientific=0x0800, fixed=0x1000, unitbuf=0x2000, };

// afiseaza baza // af. zerouri din fata nr. // caractere uppercase // explicit + // .dddddd Edd // dddd.dd // dupa fiec. op. ieire

Curs - Programare orientata pe obiecte C++/Java

27.11.2012

4.1. Formatarea I/O folosind membrii clasei ios


44

(continuare) // funcii de formatare int width(int w); // lrgime cmp int width() const; char fill(char); // caracter de umplere char fill() const; long flags(long f); long flags() const; long setf(long); // setare indicatori long setf(long setbits, long field); long unsetf(long); int precision(int); // prec. nr. v. mobil int precision() const; }; Curs - Programare orientata pe obiecte C++/Java

27.11.2012

4.1. Formatarea I/O folosind membrii clasei ios


45

Funcia setf() cu un singur argument este utilizat

pentru activarea unuia sau mai multor indicatori de formatare. Fiind o funcie membr a clasei ios, ea trebuie s fie apelat pentru un anumit obiect (stream), ceea ce nseamn c nu exist o stare global de formatare, ci fiecare stream are propria lui stare. Indicatorii de formatare pot fi modificai individual, prin apeluri separate ale funciei setf() sau grupai ntr-o expresie logic OR (SAU).
Curs - Programare orientata pe obiecte C++/Java

27.11.2012

4.1. Formatarea I/O folosind membrii clasei ios


46

De exemplu, instruciunile:

cout.setf(ios::hex); cout.setf(ios::showbase);
sunt echivalente cu instruciunea:

cout.setf(ios::hex | ios::showbase);
i au ca efect afiarea unui numr n format hexazecimal, cu reprezentarea explicit a bazei folosite. Dup o astfel de formatare, instruciunea: cout << 100; va afia la consol: 0x64.
Curs - Programare orientata pe obiecte C++/Java

27.11.2012

4.1. Formatarea I/O folosind membrii clasei ios


47

Funcia setf() cu dou argumente este o form

suprancrcat care permite modificarea acelor stri care sunt reprezentate prin cmpuri compuse din mai muli bii. De exemplu, baza numeric de afiare implic un cmp format din trei bii (dec, oct i hex) din care numai unul poate fi setat la un moment dat. Pentru o astfel de setare se apeleaz funcia setf() avnd ca prim argument (setbits) indicatorul care trebuie s fie setat, al doilea fiind un pseudoargument (field), care definete cmpul celui dinti.
Curs - Programare orientata pe obiecte C++/Java

27.11.2012

4.1. Formatarea I/O folosind membrii clasei ios


48

Pseudoargumentele definite n clasa ios sunt:


1. ios::basefield (pentru baza de numeraie,

format din biii dec, oct, hex) 2. ios::adjustfield (pentru cmpul de aliniere format din biii left i right) 3. ios::floatfield (pentru cmpul de afiare a numerelor cu virgul mobil, format din biii scientific i fixed)
Curs - Programare orientata pe obiecte C++/Java

27.11.2012

4.1. Formatarea I/O folosind membrii clasei ios


49

De exemplu, fiecare din instruciunile: cout.setf(ios::oct, ios::basefield); // octal cout.setf(ios::dec, ios::basefield); // zecimal cout.setf(ios::hex, ios::basefield); // hexazecimal seteaz baza de numeraie fr efecte asupra altor pri ale strii streamului.
Funcia unsetf() este complementar funciei

setf() i are ca efect tergerea unuia sau mai multor indicatori de format. Funcia unset() opereaz ntr-un mod asemntor cu funcia setf().
Curs - Programare orientata pe obiecte C++/Java

27.11.2012

4.1. Formatarea I/O folosind membrii clasei ios


50

Exemplul 3: Fie urmtoarea funcie care formateaz streamuri folosind funciile membre ale clasei ios. void ff() { cout.setf(ios::uppercase | ios::scientific); cout <<100.12 <<\n; cout.unsetf(ios::uppercase); cout <<100.12 <<\n; } La execuia acestei funcii se afieaz la consol numrul 100.12 n urmtoarele formate, stabilite folosind funciile setf() i unsetf(): 1.0012E+002 1.0012e+002
Curs - Programare orientata pe obiecte C++/Java

27.11.2012

4.1. Formatarea I/O folosind membrii clasei ios


51

Funcia flags() permite examinarea strii

indicatorilor de format, fr ca acetia s fie modificai. Funcia flags() returneaz o dat de tipul long, care conine valoarea fiecrui indicator de format ntr-un bit aflat pe poziia corespunztoare definirii din clasa ios.

Curs - Programare orientata pe obiecte C++/Java

27.11.2012

4.1. Formatarea I/O folosind membrii clasei ios


52

Funcia width() specific o mrime de cmp minim

pentru reprezentarea unui numr. Dup apelul funciei width(w), dac valoarea inserat n stream folosete mai puin de w caractere, atunci se completeaz cmpul pn la aceast lungime cu caracterul de completare curent (implicit spaiu). Dac pentru reprezentarea valorii inserate n stream sunt necesare mai mult de w caractere, nu se trunchiaz numrul, ci se intoduc toate caracterele acestuia, chiar dac se depete valoarea w.
Curs - Programare orientata pe obiecte C++/Java

27.11.2012

4.1. Formatarea I/O folosind membrii clasei ios


53

Funcia fill() specific caracterul de

completare a cmpurilor, folosit atunci cnd numrul de caractere necesare pentru reprezentarea unui numr este mai mic dect mrimea minim setat. Funcia precision() este utilizat pentru a determina numrul de cifre care s fie afiate dup punctul zecimal.
Curs - Programare orientata pe obiecte C++/Java

27.11.2012

4.1. Formatarea I/O folosind membrii clasei ios


54

Exemplul 4: Se consider urmtorul program care permite afiarea strii indicatorilor de formatare ai unui stream: void showflags() { long f, i, j; char indic[15][12] = { "skipws", "left", "right", "internal", "dec", "oct", "hex", "showbase", "showpoint", "uppercase", "showpos", "scientific", "fixed", "unitbuf", };
Curs - Programare orientata pe obiecte C++/Java

27.11.2012

4.1. Formatarea I/O folosind membrii clasei ios


55

(continuare) f = cout.flags(); // se citeste starea indic. if (f) for (i=1,j=0; i<=0x2000; i = i<<1,j++) { if(i & f) cout << "Este activat " << indic[j] << "\n"; } else cout<< "Nu este activat nici un indicator \n"; }

Curs - Programare orientata pe obiecte C++/Java

27.11.2012

4.1. Formatarea I/O folosind membrii clasei ios


56

(continuare program)

int main() { cout << 1234.56 <<endl; showflags(); cout.setf(ios::right| ios::showpoint | ios::fixed); cout.fill('*'); cout.width(20); cout << 1234.56 << "\n"; showflags(); cout.unsetf(ios::right|ios::showpoint|ios::fixed); cout << 1234.56 <<endl; showflags(); }
Curs - Programare orientata pe obiecte C++/Java

27.11.2012

4.1. Formatarea I/O folosind membrii clasei ios


57

La execuia acestui program se obin urmtoarele mesaje la consol: 1234.56 Nu este activat nici un indicator *********1234.560000 Este activat right Este activat showpoint Este activat fixed 1234.56 Nu este activat nici un indicator Aceste mesaje evideniaz corespondena dintre comanda de formatare apelat, numele indicatorilor de formatare modificai i efectul acestora asupra modului de afiare a unor date. De asemenea, folosind aceast funcie se pot experimenta i alte comenzi de formatare a streamurilor.
Curs - Programare orientata pe obiecte C++/Java

27.11.2012

Sistemul de intrare/ieire n C++


58

1. Funcii de I/O pentru tipurile predefinite 2. Funcii de I/O pentru tipuri definite de utilizator 3. Starea streamurilor 4. Formatarea I/O 4.1. Formatarea I/O folosind membrii clasei ios 4.2. Formatarea I/O folosind manipulatori

Curs - Programare orientata pe obiecte C++/Java

27.11.2012

4.2 Formatarea I/O folosind manipulatori


59

A doua posibilitate de a modifica modul de formatare a unui stream este aceea de a folosi funciile speciale numite manipulatori. O parte din manipulatorii care se pot folosi pentru formatarea streamurilor sunt prezentai n tabelul de mai jos. Din acest tabel se poate observa c cei mai muli manipulatori dubleaz funciile de formatare din clasa ios.

Curs - Programare orientata pe obiecte C++/Java

27.11.2012

4.2 Formatarea I/O folosind manipulatori


60

Manipulator dec endl ends flush hex oct resetiosflags(long f) setbase(int base) setfill(int ch) setiosflags(long f) setprecision(int p) setw(int w) ws

Scop
Intrare/ieire de date n zecimal Insereaz un caracter newline Insereaz un null Golete un stream Intrare/ieire n hexazecimal Intrare/ieire n octal Dezactiveaz indicatorii f Seteaz baza numeric Seteaz caracterul de completare Activeaz indicatorii f Stabilete nr. de cifre pt. precizie Stabilete dim. min. a cmpului Omite spaii libere de la inceput

Intrare/Ieire
Intrare i ieire Ieire Ieire Ieire Intrare i ieire Intrare i ieire Intrare i ieire Ieire Ieire Intrare i ieire Ieire Ieire Intrare
27.11.2012

Curs - Programare orientata pe obiecte C++/Java

61

ntrebri?

Curs - Programare orientata pe obiecte C++/Java

27.11.2012

S-ar putea să vă placă și