Differences

This shows you the differences between two versions of the page.

Link to this comparison view

poo-is:laboratoare:10 [2020/10/04 19:55]
ruben_gilian.udroiu [4. Manipulatori]
poo-is:laboratoare:10 [2020/10/12 15:14] (current)
ruben_gilian.udroiu [3. Stream]
Line 198: Line 198:
   -**<​fstream>​ (operatii fisiere)**   -**<​fstream>​ (operatii fisiere)**
 </​note>​ </​note>​
-=== 3.1. Iostream ​=== +=== 3.1. iostream ​=== 
-Denumirea de "iostream" ​provine de la standard input-output stream.+Denumirea de **iostream** provine de la standard input-output stream.
 In C++, cele doua metode fundamentale pentru a citi si, respectiv, a scrie, sunt **cin** si **cout**. In C++, cele doua metode fundamentale pentru a citi si, respectiv, a scrie, sunt **cin** si **cout**.
 <​note>​**cin**:​ <​note>​**cin**:​
-  *este o instanta a clasei **istream** si se foloseste pentru a citi input-ul de la o sursa (sursa standard este tastatura). + 
-  *este urmat de operatorul de extractie ​ (>>), care extrage inputul din obiectul cin, introdus de la tastatura.+Este o instanta a clasei **istream** si se foloseste pentru a citi input-ul de la o sursa (sursa standard este tastatura). ​Este urmat de operatorul de extractie ​ (>>), care extrage inputul din obiectul cin, introdus de la tastatura.
 </​note>​ </​note>​
 <​note>​**cout**:​ <​note>​**cout**:​
-este o instanta a clasei *ostream* si se foloseste pentru a introduce date in dispozitivul de output (de obicei ecranul). + 
-Utilizand operatorul de insertie (<<) datele sunt introduse in stream-ul de output (cout) pentru a aparea pe ecran.+Este o instanta a clasei ​**ostream** si se foloseste pentru a introduce date in dispozitivul de output (de obicei ecranul). 
 +Utilizand operatorul de insertie (**<<**) datele sunt introduse in stream-ul de output (cout) pentru a aparea pe ecran.
 </​note>​ </​note>​
  
-Operatorii << si >> sunt definiti dupa cum urmeaza :+Operatorii ​**<<** si **>**> sunt definiti dupa cum urmeaza: 
 + 
 +  ostream &​operator<<​ (ostream &, consttip_de_baza &); 
 +   
 +  istream &​operator>>​ (istream &, tip_de_baza &);
    
-ostream&​ operator<<​ (ostream&, ​consttip_de_baza&); +Acestia pot fi supradefiniti pentru tipuri de date definite de utilizator:​ 
-istream&​ operator>>​ (istream&​ ,tip_de_baza&);+ 
 +  friend ​ostream&​ operator<<​ (ostream&, ​constTIP ​&); 
 +  ​friend ​istream&​ operator>>​ (istream&, ​TIP &); 
 + 
 +Pe langa operatorii << si >>, clasele istream si ostream au implementate functiile elementare **get** si **put** 
 + 
 +  ostream&​ put (char c); 
 +  istream&​ get (char& c); 
 + 
 +== Exemplu == 
 + 
 +  char ch; 
 +  cin.get(ch);​ 
 +  cout.put(ch);
    
-Acestia ​pot fi supradefiniti pentru tipuri ​de date definite ​de utilizator ​:+==Functii de citire/​modificare a starii:== 
 + 
 +| obool bad(); ​    | arata daca a existat o eroare la efectuarea ultimei operatii ​      | 
 +| bool good(); ​    | arata daca ultima operatie s-a efectuat cu succes ​      | 
 +| void clear(); ​    | sterge indicatorii de eroare ​      | 
 + 
 +== Manipulatori == 
 + 
 +<​note>​Manipulatorii reprezinta operatii ce pot fi inserate in secventele de citire/​scriere. Acestia fac ca urmatoarele operatii ​de citire sau scriere sa aiba loc cu un alt tip de conversie. 
 +</​note>​ 
 + 
 +  Sintaxa: 
 +  cout << manipulator << ....;
    
-friend ostream&​ operator<< ​(ostream&,​ constTIP &)+Exemplu: 
-friend istream&​ operator>> ​(istream&,​ TIP &);+  cout << ​hex << 10 << endl << 11;//OUTPUT: a b 
 +  cin >> oct >> ​i// i va fi citit de la consola in baza 8
    
-Pe langa operatorii << si >>, clasele istream si ostream au implementate functiile elementare *get* si *put*+Manipulatorii fara parametri sunt:
    
-ostream&​ put (char c); +  -dec (specifica baza10
-istream&​ get (char& c);+  ​-oct ​(specifica baza8) 
 +  -hex (specifica baza16) 
 +  -endl (end of line, adica insereaza'​\n'​) 
 +  -ws (ignora spatiile goale: space, tab ) 
 +  -ends (end of string, adica insereaza '​\0'​) 
 +  -flush (goleste bufferul de iesire)
  
-*exemplu*+Exemplu:  
 +  int x; 
 +  cin >> hex >> x; //F 
 +  cout << dec << x;//15 
 + 
 +  string s, s1; 
 +  cin >> ws >> s; // introducde la tastatura textul: ”xx yy zz” 
 +  cout << s; //xx 
 +  cin >> s1; //fara sa scriu ceva de la tastatura, in s1 se citeste in continuare yy 
 +  cout << s1; //yy 
 +  cout << flush;
    
-char ch; +Manipulatori cu parametri ​(definiti in **iomanip.h**):
-cin.get(ch); +
-cout.put(ch)+
-  +
-Functii de citire/​modificare a starii: +
-  +
-bool bad(); -> arata daca a existat o eroare la efectuarea ultimei operatii +
-bool good(); -> arata daca ultima operatie s-a efectuat cu succes +
-void clear(); -> sterge indicatorii de eroare+
  
-== Manipulatori ​==+  setprecision (int n) - (pentru numerele reale) precizia este setata la n zecimale 
 +  setw (int n) - seteaza latimea campului pentru afisare la n 
 +  setfill (char ch) - selecteaza caracterul de umplere (completeaza pozitiile libere din camp) 
 + 
 +=== 3.2. ifstream, ofstream si fstream ​=== 
 +Pentru deschiderea de fisiere putem folosi constructorii cu/fara parametri pusi la dispozitie pentru toate tipurile de fisiere (intrare, iesire si intrare-iesire) 
 + 
 +  ofstream::​ofstream(const char*nume, int mod=ios::​out,​ int acces=0) 
 +  nume - numele fisierului 
 +  mod - modul de acces 
 +  acces - tipul de protectie/​acces 
 + 
 +Exemplu:  
 +  ofstream ofis("​date1.txt",​ios::​app);​
  
-Manipulatorii reprezinta operatii ce pot fi inserate ​in secventele de citire/​scriere. Acestia fac ca urmatoarele operatii de citire sau scriere sa aiba loc cu un alt tip de conversie.+Modurile (preferinite ​in clasa ios) sunt: 
 +  *ios::in - intrare 
 +  *ios::out - iesire 
 +  *ios::ate - deschidere ​cu pozitionare la sfarsitul fisierului 
 +  *ios::app - append, adaugare la sfarsitul fisierului 
 +  *ios::​binary - deschidere in mod binar
    
-Sintaxa:+<​note>​Modurile pot fi combinate cu SAU logic la nivel de bit (|)
    
-cout << manipulator << ....;+**Acces** 
 +  *0 - normal 
 +  *1 - read-only 
 +  *2 - hidden 
 +  *3 - sistem 
 +</note> 
 + 
 +Se poate folosi si functia cu efect similar: 
 +  void open (const char *nume_fisier,​ int mod, int acces)
    
-Exemplu ​+In urma deschiderii,​ este indicata testarea pentru erori
-cout << ​hex << 10 << endl << 11;//​OUTPUT: ​b+  if (!numefis) ​cout << ​"​eroare"​; 
 + 
 +Pentru inchiderea unui fisier, se foloseste functia "​**void close();​**",​ functie ce este apelata de destructorul claselor ce lucreaza cu fisiere, deci fisierul va fi inchis **automat** la finalul duratei de viata variabilei de tip fisier.
    
-cin >> oct >> i// i va fi citit de la consola ​in baza 8+Putem citi o linie dintr-un fisier text (sau cin) cu functia: 
 +  getline(unsigned char *buf,   int l,    char delim); 
 + 
 +Functia **getline** citeste ​in buf cel mult **l-1** caractere, pana la intalnirea caracterului **delim**, care este implicit **'​\n'​(newline)** si pune **'​\0'​** la sfarsitul liniei citite.
    
-Manipulatorii fara parametri sunt :+Exemplu: 
 +  ifstream ifis("​date2.dat"​);​ 
 +  char buf[256]; 
 +  while(!ifis.eof()) { 
 +        ifis.getline(buf,​ 256, '​\n'​);​ 
 +        cout << buf << endl;    
 +  }
    
--dec(specifica baza10) +<note important>​A se consulta cursul pentru mai multe exemple!</​note>​
--oct(specifica baza8) +
--hex(specifica baza16) +
--endl(end of line, adica insereaza'​\n'​) +
--ws(ignora spatiile goale: space, tab ) +
--ends(end of string, adica insereaza '​\0'​) +
--flush(goleste bufferul de iesire)+
    
-exemplu: intx; +==Fisiere binare==
-cin>>​hex>>​x;//​F +
-cout<<​dec<<​x;//​15+
    
 +In cazul fisierelor binare, nu se pot folosi functiile obisnuite de citire/​scriere deoarece datele nu sunt formatate in vreun fel anume.
    
-string s,s1; +Clasele specializate pentru fisiere binare includ doua functii pentru citirea si scrierea secventiala:  
-cin>>​ws>>​s;​ // introducde la tastatura textul”xx yy zz” +  ​-**write** 
-cout<<​s;​ //xx +  ​-**read** 
-cin>>​s1;​ //fara sa scriu ceva de la tastaturain s1 se citeste in continuare yy + 
-cout<<​s1//yy +  istream&​ read(unsigned char *bufintn)
-cout<<​flush;+  ​ostream&​ write(constunsigned char *buf, intn);
    
-Manipulatori cu parametri (definiti ​in iomanip.h)+Functiile citesc/​scriu din/in fisierul respectiv **n octeti** in/din buf
    
-setprecision(int n(pentru numerele realeprecizia este setata la n zecimale +Pozitionarea absoluta in fisierul binar este realizata de metodele **seekg** ​(citire din **ifstream**si **seekp** ​(scriere in **ofstream**): 
-setw(int n- seteaza latimea campului pentru afisare la n + 
-setfill(char ch- selecteaza caracterul ​de umplere ​(completeaza pozitiile libere din camp)+  ifstream&​ seekg(long poz, int reper); 
 +  ​ofstream&​ seekp(long poz, int reper)
 +  poz = pozitia in octeti 
 +  Reper poate fi una dintre constantele:​  
 +     ​ios::​beg (pozitionare fata de inceput) 
 +     ​ios::​cur ​(fata de pozitia curenta)  
 +     ​ios::​end (fata de sfarsit)
poo-is/laboratoare/10.1601830522.txt.gz · Last modified: 2020/10/04 19:55 by ruben_gilian.udroiu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0