//developpement de la classe Rational #include #include using namespace std; class Rational { //membres publiques public: //constructeurs Rational(); //constructeur par defaut (0 parametres) Rational(int num); //constructeur avec 1 parametres Rational(int num, int den); //constructeur avec 2 parametres Rational(const Rational &r); //constructeur de copie //destructeur ~Rational(); //fonctions d'access int GetNum() const; int GetDen() const; void SetNum(int num); void SetDen(int den); //methodes publiques double Convert() const; void Invert(); void Print() const; void Reduce(); //operateurs surchages Rational operator+(const Rational &) const; Rational operator-() const; Rational operator-(const Rational &) const; Rational operator*(const Rational &) const; Rational operator/(const Rational &) const; bool operator==(const Rational &) const; bool operator<(const Rational &) const; bool operator<=(const Rational &) const; bool operator>(const Rational &) const; bool operator>=(const Rational &) const; //membres privees private: //donnees privees int num; int den; //methodes privees }; //n'oubliez pas le ; //constructeur par defaut Rational::Rational() { num = 0; den = 1; cout << "Un nombre Rational a ete cree par defaut." << endl; } //constructeur avec 1 parametre //les deux constructeurs (fonctions) suivants sont equivalents /*Rational::Rational(int n) { num = n; den = 1; cout << "Un nombre Rational a ete cree; denom. = 1." << endl; } */ Rational::Rational(int n): num(n), den(1) { cout << "Un nombre Rational a ete cree; denom. = 1." << endl; } //constructeur avec 2 parametres //les deux constructeurs (fonctions) suivants sont equivalents /*Rational::Rational(int n, int d) { num = n; den = d; Reduce(); cout << "Un nombre Rational a ete cree." << endl; } */ Rational::Rational(int n, int d): num(n), den(d) { Reduce(); cout << "Un nombre Rational a ete cree." << endl; } //constructeur de copie //les deux constructeurs (fonctions) de copie suivants sont equivalents /*Rational::Rational(const Rational &r) { num = r.num; den = r.den; cout << "Un nombre Rational a ete copie." << endl; } */ Rational::Rational(const Rational &r): num(r.num), den(r.den) { cout << "Un nombre Rational a ete copie." << endl; } //destructeur Rational::~Rational() { cout << "Un nombre Rational a ete detruit." << endl; } //fonctions d'acces int Rational::GetNum() const { return num; } int Rational::GetDen() const { return den; } void Rational::SetNum(int n) { num = n; } void Rational::SetDen(int d) { den = d; } //algorithme d'Euclide pour trouver le plus grand diviseur commun void Rational::Reduce() { int m = abs(num); int n = abs(den); if (m0) { r = m % n; m = n; n = r; } int gdc = m; num = abs(num) / gdc; if (num*den<0) num = -num; den = abs(den) / gdc; } double Rational::Convert() const { return double(num) / den; } void Rational::Invert() { int temp = num; num = den; den = temp; } void Rational::Print() const { cout << num << '/' << den << endl; } //surcharge des operateurs //N.B. : declaration differente pour les methodes //qui ne sont pas membre de la classe ! Rational Rational::operator+(const Rational &q) const { int n, d; n = num*q.den + den*q.num; d = den*q.den; Rational res = Rational(n,d); return res; } Rational Rational::operator-() const { int n, d; n = -num; d = den; Rational res = Rational(n,d); return res; } Rational Rational::operator-(const Rational &q) const { int n, d; n = num*q.den - den*q.num; d = den*q.den; Rational res = Rational(n,d); return res; } Rational Rational::operator*(const Rational &q) const { int n, d; n = num * q.num; d = den * q.den; Rational res = Rational(n,d); return res; } Rational Rational::operator/(const Rational &q) const { int n, d; n = num*q.den; d = den*q.num; Rational res = Rational(n,d); return res; } bool Rational::operator==(const Rational &q) const { return (num*q.den == den*q.num); } bool Rational::operator<(const Rational &q) const { return (num*q.den < den*q.num); } bool Rational::operator<=(const Rational &q) const { return (num*q.den <= den*q.num); } bool Rational::operator>(const Rational &q) const { return (num*q.den > den*q.num); } bool Rational::operator>=(const Rational &q) const { return (num*q.den >= den*q.num); } int main() { Rational q; int num, den; cout << "Entrez un nombre Rational (fraction) ! " << endl; cout << "numerateur : "; cin >> num; q.SetNum(num); cout << "denominateur : "; cin >> den; q.SetDen(den); q.Reduce(); cout << "La fraction est : "; q.Print(); cout << "et sa valeur decimal : " << q.Convert() << endl; cout << endl; cout << "Operations arithmetiques avec Rational" << endl; Rational a(21, 9); cout << "a = "; a.Print(); Rational b(6, 36); cout << "b = "; b.Print(); Rational s = a+b; cout << "a + b = "; s.Print(); Rational d = a-b; cout << "a - b = "; d.Print(); Rational p = a*b; cout << "a * b = "; p.Print(); Rational r = a/b; cout << "a / b = "; r.Print(); cout << "a / b (decimal) = " << r.Convert() << endl; Rational t = -a; cout << "-a = "; t.Print(); Rational u = a; //copie cout << "u = "; u.Print(); cout << endl; cout << "Operations logiques avec Rational" << endl; if (a==b) cout << "a et b sont egales !" << endl; else cout << "a et b sont differentes !" << endl; if (ab) cout << "a est plus grande !" << endl; //avec un pointeur cout << endl; cout << "Rational avec un pointeur" << endl; Rational *x; x = new Rational; x->SetNum(5); x->SetDen(13); cout << "x = "; x->Print(); cout << "x (decimal) = " << x->Convert() << endl; delete x; return 0; }