C++ permite citirea și afișarea datelor de tipuri simple (întreg, real, etc.) cu ajutorul operatorilor >>
(de extracție din flux) și <<
(inserție în flux) aplicați obiectelor cin
și cout
, sau altor obiecte care permit accesarea unor fluxuri de caractere (din/în fișiere text, din/în stringuri).
Practic, citirea se implementează astfel: in >> n
; ea este o operație binară, cu operanzii:
in
– un obiect, instanță a claseiistream
– poate ficin
, un obiect de tipifstream
pentru citirea din fișier, etc;X
– o dată de un tip de bază (de exempluint
) sau un obiect al clasei pentru catre supraîncărcăm operatorul.
Afișarea se implementează similar. Mecanismul de supraîncărcare a operatorilor constă în funcții prietene, deoarece primul operand nu este de obiect al clasei pentru care facem supraîncărcarea, ci de tip istream
(pentru citire), respectiv ostream
(pentru scriere).
Programul de mai jos implementează operațiile de citire și afișare pentru clasa Fractie
.
#include <iostream> using namespace std; class Fractie{ private: int numarator, numitor; public: Fractie(int a = 0, int b = 1) /// constructor { if(b < 0) a = -a, b = -b; numarator = a, numitor = b; } friend istream & operator >> (istream & in , Fractie & F) { in >> F.numarator >> F.numitor; return in; } friend ostream & operator << (ostream & out , const Fractie & F) { out << F.numarator << "/" << F.numitor; return out; } }; int main(){ Fractie X; cin >> X; // 3 5 cout << X << endl; // 3/5 return 0; }
În cazul citirii, operatorul >>
returnează o referință la parametrul istream & in
pentru a putea folosi citiri “înlănțuite”, de forma cin >> X >> Y
, unde X
și Y
sunt obiecte ale clasei definite sau variabile de alt tip.
Dintr-un motiv similar, operatorul <<
returnează o referință la ostream & out
.