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

Majoritatea operatorilor C++ sunt binari, adică au doi operanzi. Mulți dintre ei ne sunt binecunoscuți: operatorii aritmetici, relaționale, logici, dar sunt și operatori care cer, poate, mai multă atenție și pentru care mecanismul de definire va fi tratat în alte articole: operatorul de atribuire (=), operatorul de indexare ([]), etc.

Pentru a supraîncărca operatori binari, folosim metode sau funcții prietene, astfel:

  • dacă primul operand este obiect al clasei, putem folosi fie metode, fie funcții prietene;
  • dacă primul operand nu este obiect al clasei pentru care supraîncărcăm operatorul, vom folosi funcții prietene.

Observație: La supraîncărcarea unei operații folosind o metodă a clasei, primul operand este considerat obiectul curent. Al doilea operand este transmis ca parametru și poate fi de același tip cu primul sau de alt tip.

Exemplul următor implementează operațiile de adunare pentru fracții:

  • între două fracții – printr-o metodă;
  • între o fracție și un întreg – printr-o metodă;
  • între un întreg și fracție – printr-o funcție prietenă.
#include <iostream>

using namespace std;

class Fractie{
    private:
        int numarator, numitor;
    public:
		void afiseaza() /// metodă pentru afișarea fractiei
		{
			cout << numarator << "/" << numitor << endl;
		}
		Fractie(int a = 0, int b = 1) /// constructor
		{
			if(b < 0)
				a = -a, b = -b;
			numarator = a, numitor = b;
		}
		Fractie operator+ (Fractie F)
		{	/// metodă, operația F + G
			Fractie R;
			R.numarator = numarator * F.numitor + numitor * F.numarator;
			R.numitor = numitor * F.numitor;
			return R;
		}
		Fractie operator+ (int n)
		{	/// metodă, operația F + n
			Fractie R;
			R.numarator = numarator + n * numitor;
			R.numitor = numitor;
			return R;
		}
		friend Fractie operator + (int n, Fractie F)
		{	/// funcție prietenă, operația n + F
			Fractie R;
			R.numarator = F.numarator + n * F.numitor;
			R.numitor = F.numitor;
			return R;
		}
};

int main(){
	Fractie X(1 , 4), Y(2, 3);
	Fractie R = X + Y;
	R.afiseaza();
	R = X + 2;
	R.afiseaza();
	R = 2 + X;
	R.afiseaza();
	return 0;
}

Programul de mai sus va afișa:

11/12
9/4
9/4

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