8403 afișări Candale Silviu (silviu) 01.06.2021 www.pbinfo.ro
Etichete: nicio etichetă

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 clasei istream – poate fi cin, un obiect de tip ifstream pentru citirea din fișier, etc;
  • X – o dată de un tip de bază (de exemplu int) 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.


8403 afișări Candale Silviu (silviu) 01.06.2021 www.pbinfo.ro