Skip to content

Latest commit

 

History

History
103 lines (94 loc) · 5.7 KB

POO_22_C_2022-02-24.md

File metadata and controls

103 lines (94 loc) · 5.7 KB

FLUXURI STANDARD

C C++
stdin cin
stdout cout
stderr cerr
clog -> mesajele de eroare din clog nu ajung imediat pe ecran, ci ajung intr-un buffer; acestea ajung pe ecran in urma unui apel clog.flush()
stdaux
stdprn

Pentru a lucra cu fluxuri trebuie sa includem biblioteca iostream. Pentru fluxurile C++ de intrare de obicei este supraincarcat operatorul >> (in stanga - fluxul, in dreapta - variabila in care se depune ce a fost de citit in flux). Pentru fluxurile de iesire este supraincarcat operatorul <<. In C++, operatorii >> si << au capatat noi valente.

MANIPULATORI

In sirul de operatori >> sau << aplicati unui flux de intrare/iesire pot sa apara si manipulatori - functii speciale care se folosesc numai in cadrul acestei insiruiri de operatori. Manipulatorii pot fi:

  • fara parametru - introducerea lor se face fara a folosi ();
  • cu parametru In cazul manipulatorilor cu parametru se folosesc () si pentru a-i utiliza trebuie sa includem biblioteca iomanip. Lista manipulatori
Manipulator Explicatie
dec se introduce in sirul de << si specifica faptul ca numerele intregi se vor afisa in baza 10
hex se introduce in sirul de << si specifica faptul ca numerele intregi se vor afisa in baza 16
oct se introduce in sirul de << si specifica faptul ca numarele intregi se vor afisa in baza 8
internal la afisarea numerelor intregi se afiseaza si baza de numeratie
scientific numerele reae se afiseaza sub forma exponentiala
ws scoate spatiile libere de la inceputul fluxului
endl salt la o linie noua
ends introduce caracterul NULL in flux
flush goleste fluxul de iesire
setiosflags (long)
resetiosflags (long) manipulatorul invers al lui setiosflags; pe pozitiile pe care bitii primiti sunt 1 se dezactiveaza formatarile corespunzatoare
setw (int) specifica numarul de caracterre pe care se face afisarea formatata
setbase (int) seteaza baza de numeratie; putem avea ca parametru 0 - baza implicita / 8 / 10 / 16
setfill (int) specifica un caracter primit ca parametru ce va fi folosit pentru umplerea spatiilor libere

Un flux de iesire are atasat un camp de tip long (32 de biti). O parte dintre bitii acestui camp sunt folositi pentru a specifica pentru acel flux anumite formatari folosite la afisare (baza 10/16/8 - cate un bit, aliniere la stanga / dreapta - alti biti). Daca bitul corespunzator unei formatari este 1, acea formatare este activa. Valoarea primita ca parametru la setiosflags activeaza formatarile pe pozitiile pe care avem 1 la bitii valorii primite ca parametru. Exemplu: pentru alinierea la stanga a unei afisari formatate avem bitul corespunzator constantei ios::left, iar pentru alinierea la dreapta avem alt bit corespunzator constantei ios::right. Daca activam ambele formatari se va utiliza prima formatare gasita.

... << setiosflags (ios::right) << resetiosflags (ios::right) << setiosflags (ios::left) << ... ;
//ultimul setiosflags (ios::left) <- nu se ia in considerare

Pentru a activa alinierea la stanga inainte se face o dezactivare a alinierii la dreapta. Din cauza ca fiecare constanta definita pentru o formatare este un numar intreg putere a lui 2, ca parametru al manipulatorilor setiosflags si resetiosflags putem da mai multe constante folosind operatorul | (ȘI - pe biti):

setiosflags(ios::right | ios::dec)

INDICATORI DE FORMATARE

Indicatorii de formatare suntr constante intregi puteri ale lui 2 corespunzatoare bitilor de formatare ai fluxului de iesire. Acestia sunt constante statice publice, membre ale clasei ios.

ios::indicator
// :: reprezinta operatorul de rezolutie
// ce este la dreapta LA ce este la stanga fata de operatorul de rezolutie
Indicator Explicatie
ios::skipws sunt ignorate la citire spatiile de la inceputul fluxului de intrare
char x,y;
cin >> setiosflags (ios::skipws) >> x >> y;
// |_|_|_|...|u|v|...|
// x = 'u'
// y = 'v'
Indicator Explicatie
ios::left
ios::right
ios::internal
ios::scientific
ios::fixed
ios::dec
ios::hex
ios::oct
ios::uppercase numerele se afiseaza cu litere mari (A,B,C,D,E,F)
ios::showbase
ios::showpoint se obliga afisarea punctului la numerele reale
ios::showpos la afisarea numerelor pozitive se afiseaza +
ios::unitbuf se goloseste bufferul depa citire
ios::stdio se face o sincronizare a fluxului de intrare C++ cu fluxul de iesire din C si invers

NAMESPACE-uri

Intr-un limbaj de programare superior apar o multime de denumiri de variabila, constante, nume de functii, nume de tipuri de date, etc. Intr-un program de dimensiuni medii se aduna foarte multe denumiri, existand posibilitatea ca denumirile sa se repete in diferite contexte. Astfel, denumirile aceluias context se introduc intr-un namespace separat. Referirea la o denumire dintr-un namespace se face folosind operatorul ::.

namespace::denumire

Introducerea unui nou namespace se face astfel:

namespace nume
{
	...
	denumire
	...
}

Atunci cand dorim sa fie cunoscute toate denumirile intr-un program folosim using namespace nume;. In C++ exista namespace-ul std care contine denumiri ca cin, cout, cerr, setiosflags, setbase, etc.