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

În C++ există operatorii relaționali (<, >, <=, >=, ==, !=) folosiți pentru a compara datele de tipuri predefinite (int, double, etc.). Ei pot fi supraîncărcați în contextul claselor, pentru a compara obiecte.

Fiind operatori binari, se aplică regulile prezentate în acest articol, iar rezultatul lor este de tip bool sau întreg: true (1), dacă relatia are loc și false (0) dacă relația nu are loc.

Este interesant de constatat că pentru a compara două date, trebuie precizată explicit numia relația de îndeplinit pentru operația <. Ceilalți operatori relationali pot fi implementați pe baza acesteia.

A < B /// se implementează explicit
A == B     ↔    !(A < B) && !(B < A)
A != B     ↔    (A < B) || (B < A)
A <= B     ↔    A < B || A == B
A > B      ↔    !(A <= B)
A >= B     ↔    !(A < B)

În exemplul de mai jos sunt implementate operatorul < pentru fracții:

  • F < G, unde F și G sunt fracții;
  • F < n, unde F este fracție, iar n este întreg;
  • n < F, unde F este fracție, iar n este întreg.
#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;
		}
		friend bool operator < (Fractie F , Fractie G)
		{	/// metodă, operația F < G
			return F.numarator * G.numitor < F.numitor * G.numarator;
		}
		friend bool operator < (Fractie F , int n)
		{	/// F < n
			return F.numarator * 1 < F.numitor * n;
		}
		friend bool operator < (int n, Fractie F)
		{	/// n < F
			return n * F.numitor < F.numarator * 1;
		}
};

int main(){
	Fractie X(1 , 4), Y(2, 3);
	cout << (X < Y) <<endl;
	cout << (Y < X) <<endl;
	cout << (X < 2) <<endl;
	cout << (2 < X) <<endl;
	return 0;
}

Programul de mai sus va afișa:

1
0
1
0

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