// racional.h - Declaración de la clase CRacional
#if !defined( _RACIONAL_H_ )
#define _RACIONAL_H_

#include <iostream>

// Clase para operar con números racionales
class CRacional
{
  friend const CRacional operator+(const CRacional&, const CRacional&);
  friend const CRacional operator-(const CRacional&, const CRacional&);
  friend const CRacional operator*(const CRacional&, const CRacional&);
  friend const CRacional operator/(const CRacional&, const CRacional&);
  friend bool operator==(const CRacional&, const CRacional&);
  friend bool operator<(const CRacional&, const CRacional&);
  friend bool operator>(const CRacional&, const CRacional&);
  friend std::ostream& operator<<(std::ostream&, const CRacional&);
  friend std::istream& operator>>(std::istream&, CRacional&);
  
  private:
    long numerador;
    long denominador;
    
  protected:
    CRacional& Simplificar();
    
  public:
    CRacional(long = 0, long = 1); // constructor
    operator double(); // operador de conversión CRacional a double
    CRacional& operator+=(const CRacional&);
    CRacional& operator-=(const CRacional&);
    //CRacional operator+(const CRacional&);
    bool operator!();
    CRacional operator++();
    CRacional operator++(int);
    CRacional operator--();
    CRacional operator--(int);
    CRacional operator-();
};

#endif // _RACIONAL_H_

// Prototipos de las funciones externas
const CRacional operator+(const double, const CRacional&);

