Differences

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

Link to this comparison view

poo-is:laboratoare:10 [2020/10/08 17:25]
ruben_gilian.udroiu [3. Stream]
poo-is:laboratoare:10 [2020/10/12 15:14] (current)
ruben_gilian.udroiu [3. Stream]
Line 212: Line 212:
  
 Operatorii **<<​** si **>​**>​ sunt definiti dupa cum urmeaza: Operatorii **<<​** si **>​**>​ sunt definiti dupa cum urmeaza:
- +
   ostream &​operator<<​ (ostream &, consttip_de_baza &);   ostream &​operator<<​ (ostream &, consttip_de_baza &);
   ​   ​
Line 218: Line 218:
    
 Acestia pot fi supradefiniti pentru tipuri de date definite de utilizator: Acestia pot fi supradefiniti pentru tipuri de date definite de utilizator:
-  + 
-friend ostream&​ operator<<​ (ostream&,​ constTIP &); +  friend ostream&​ operator<<​ (ostream&,​ constTIP &); 
-friend istream&​ operator>>​ (istream&,​ TIP &); +  friend istream&​ operator>>​ (istream&,​ TIP &); 
- +
 Pe langa operatorii << si >>, clasele istream si ostream au implementate functiile elementare **get** si **put** Pe langa operatorii << si >>, clasele istream si ostream au implementate functiile elementare **get** si **put**
- +
   ostream&​ put (char c);   ostream&​ put (char c);
   istream&​ get (char& c);   istream&​ get (char& c);
  
 == Exemplu == == Exemplu ==
- +
   char ch;   char ch;
   cin.get(ch);​   cin.get(ch);​
Line 234: Line 234:
    
 ==Functii de citire/​modificare a starii:== ==Functii de citire/​modificare a starii:==
-  + 
-bool bad(); ​-> arata daca a existat o eroare la efectuarea ultimei operatii +| obool bad(); ​    | arata daca a existat o eroare la efectuarea ultimei operatii ​      | 
-bool good(); ​-> arata daca ultima operatie s-a efectuat cu succes +bool good(); ​    | arata daca ultima operatie s-a efectuat cu succes ​      | 
-void clear(); ​-> sterge indicatorii de eroare+void clear(); ​    | sterge indicatorii de eroare ​      |
  
 == Manipulatori == == Manipulatori ==
  
-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>​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 << ....;
    
-Sintaxa:+Exemplu: 
 +  cout << hex << 10 << endl << 11;//​OUTPUT:​ a b 
 +  cin >> oct >> i; // i va fi citit de la consola in baza 8
    
-cout << manipulator << ....;+Manipulatorii fara parametri sunt:
    
-Exemplu : +  -dec (specifica baza10) 
-cout << ​hex << ​10 << ​endl << ​11;//OUTPUT: a b+  -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:  
 +  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;
    
-cin >> oct >> i; // i va fi citit de la consola in baza 8 +Manipulatori cu parametri (definiti in **iomanip.h**): 
-  + 
-Manipulatorii fara parametri sunt : +  setprecision (int n) - (pentru numerele reale) precizia este setata la n zecimale 
-  +  setw (int n) - seteaza latimea campului pentru afisare la n 
--dec(specifica baza10) +  setfill (char ch) - selecteaza caracterul de umplere (completeaza pozitiile libere din camp)
--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; +
-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;​ +
-  +
-Manipulatori cu parametri (definiti in iomanip.h) +
-  +
-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 === === 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) 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) +  ofstream::​ofstream(const char*nume, int mod=ios::​out,​ int acces=0) 
-nume - numele fisierului +  nume - numele fisierului 
-mod - modul de acces +  mod - modul de acces 
-acces - tipul de protectie/​acces +  acces - tipul de protectie/​acces 
-  + 
-exemplu ​: ofstream ofis("​date1.txt",​ios::​app);​ +Exemplu 
- +  ​ofstream ofis("​date1.txt",​ios::​app);​ 
 Modurile (preferinite in clasa ios) sunt: Modurile (preferinite in clasa ios) sunt:
-ios::in - intrare +  *ios::in - intrare 
-ios::out - iesire +  *ios::out - iesire 
-ios::ate - deschidere cu pozitionare la sfarsitul fisierului +  *ios::ate - deschidere cu pozitionare la sfarsitul fisierului 
-ios::app - append, adaugare la sfarsitul fisierului +  *ios::app - append, adaugare la sfarsitul fisierului 
-ios::binary - deschidere in mod binar+  *ios::binary - deschidere in mod binar
    
-Nota: modurile ​pot fi combinate cu SAU logic la nivel de bit (|) +<​note>​Modurile ​pot fi combinate cu SAU logic la nivel de bit (|)
-  +
-acces = 0 - normal +
-      = 1 - read-only +
-      = 2 - hidden +
-      = 3 - sistem+
    
 +**Acces**
 +  *0 - normal
 +  *1 - read-only
 +  *2 - hidden
 +  *3 - sistem
 +</​note>​
 +
 Se poate folosi si functia cu efect similar: Se poate folosi si functia cu efect similar:
-void open (const char *nume_fisier,​ int mod, int acces)+  ​void open (const char *nume_fisier,​ int mod, int acces)
    
-In urma deschiderii,​ este indicata testarea pentru erori : +In urma deschiderii,​ este indicata testarea pentru erori: 
-if(!numefis) cout << "​eroare";​+  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 a variabilei de tip fisier.
    
-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 a variabilei de tip fisier. +Putem citi o linie dintr-un fisier text (sau cin) cu functia: 
-  +  getline(unsigned char *buf,   int l,    char delim); 
-Putem citi o linie dintr-un fisier text (sau cin) cu functia : + 
-  +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.
-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.+
    
 Exemplu: Exemplu:
-ifstream ifis("​date2.dat"​);​ +  ​ifstream ifis("​date2.dat"​);​ 
-char buf[256]; +  char buf[256]; 
-while(!ifis.eof()) {+  while(!ifis.eof()) {
         ifis.getline(buf,​ 256, '​\n'​);​         ifis.getline(buf,​ 256, '​\n'​);​
         cout << buf << endl;            cout << buf << endl;   
-}+  ​}
    
-*A se consulta cursul pentru mai multe exemple+<note important>​A se consulta cursul pentru mai multe exemple!</​note>​
    
-Fisiere binare+==Fisiere binare==
    
 In cazul fisierelor binare, nu se pot folosi functiile obisnuite de citire/​scriere deoarece datele nu sunt formatate in vreun fel anume. In cazul fisierelor binare, nu se pot folosi functiile obisnuite de citire/​scriere deoarece datele nu sunt formatate in vreun fel anume.
    
-Clasele specializate pentru fisiere binare includ doua functii pentru citirea si scrierea secventiala : write si read+Clasele specializate pentru fisiere binare includ doua functii pentru citirea si scrierea secventiala: ​ 
 +  -**write** 
 +  -**read** 
 + 
 +  istream&​ read(unsigned char *buf, intn); 
 +  ostream&​ write(constunsigned char *buf, intn);
    
-istream&​ read(unsigned char *buf, intn); +Functiile citesc/​scriu din/in fisierul respectiv **n octeti** in/​din ​buf
-ostream&​ write(constunsigned char *buf, intn);+
    
-Functiile citesc/​scriu din/in fisierul respectiv n octeti in/din buf +Pozitionarea absoluta in fisierul binar este realizata de metodele ​**seekg** (citire din **ifstream**) si **seekp** (scriere in **ofstream**): 
-  + 
-Pozitionarea absoluta in fisierul binar este realizata de metodele seekg (citire din ifstream) si seekp(scriere in ofstream) : +  ifstream&​ seekg(long poz, int reper); 
-  +  ofstream&​ seekp(long poz, int reper); 
-ifstream&​ seekg(long poz, int reper); +  poz = pozitia in octeti 
-ofstream&​ seekp(long poz, int reper); +  ​Reper ​poate fi una dintre constantele: ​ 
-  +     ios::beg (pozitionare fata de inceput) 
-poz = pozitia in octeti +     ios::cur (fata de pozitia curenta) ​ 
-reper poate fi una dintre constantele : ios::beg (pozitionare fata de inceput)ios::cur (fata de pozitia curenta)ios::​end(fata de sfarsit);+     ios::end (fata de sfarsit)
poo-is/laboratoare/10.1602167116.txt.gz · Last modified: 2020/10/08 17:25 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