#include // pourquoi accepte-t-il le set sur la variable const? class Rationnel{ private: int numerateur; int denominateur; public: Rationnel(void); Rationnel(int n, int d); Rationnel(const Rationnel & x); int getNumerateur(void) const; int getDenominateur(void) const; Rationnel & setNumerateur(int n); Rationnel & setDenominateur(int d); Rationnel & operator=(const Rationnel & x); }; // Méthode 1: l'opérateur << est externe à la classe. Il n'a donc pas // accès aux champs privés de celle-ci. ostream & operator<< (ostream & o, const Rationnel & x); void IncrementNum(Rationnel X); int main(void){ Rationnel F(3,4); Rationnel G, H; const Rationnel UneDemi(1,2); cout << "\n" << F << "\n"; F = UneDemi; // assignation cout << F << "\n"; G = H = UneDemi; cout << G << "\n"; cout << H << "\n"; return 0; } Rationnel::Rationnel(void): numerateur(1), denominateur(1) { } Rationnel::Rationnel(int n, int d): numerateur(n), denominateur(d) { } Rationnel::Rationnel(const Rationnel & x){ numerateur = x.getNumerateur(); denominateur = x.getDenominateur(); cout << "\ndans le constructeur de copie\n"; } int Rationnel::getNumerateur(void) const { return numerateur; } int Rationnel::getDenominateur(void) const{ return denominateur; } Rationnel & Rationnel::setNumerateur(int n) { numerateur = n; return *this; } Rationnel & Rationnel::setDenominateur(int d){ denominateur = d; return *this; } void IncrementNum(Rationnel X){ X.setNumerateur(X.getNumerateur() + 1); cout << "\n" << X << "\n"; } Rationnel & Rationnel::operator=(const Rationnel & x){ numerateur = x.getNumerateur(); denominateur = x.getDenominateur(); return *this; } ostream & operator<< (ostream & o, const Rationnel & x){ o << "(" << x.getNumerateur() << " / " << x.getDenominateur() << ")"; return o; }