#ifndef TEMPERATURE
#define TEMPERATURE

#include <iostream.h>              // istream, ostream

class Temperature
{
 public:
   Temperature();
   Temperature(double initialDegrees, char initialScale);

   double Degrees() const;
   char Scale() const;

   Temperature Fahrenheit() const;
   Temperature Celsius() const;
   Temperature Kelvin() const;

   Temperature operator+(double rightOperand) const;
   Temperature operator-(double rightOperand) const;

   int Compare(const Temperature & rightOperand) const;
   bool operator==(const Temperature & rightOperand) const;
   bool operator<(const Temperature & rightOperand) const;

   void Read(istream & in);
   void Print(ostream & out) const;

 private:
   double myDegrees;
   char myScale;      // 'F', 'C', or 'K'
};

// -------- Default-value constructor ------------------------------------

inline Temperature::Temperature()
{
   myDegrees = 0.0;
   myScale = 'C';
}


// -------- Degrees accessor --------------------------------------------

inline double Temperature::Degrees() const
{
   return myDegrees;
}

// -------- Scale accessoror --------------------------------------------

inline char Temperature::Scale() const
{
   return myScale;
}

// -------- Output function member ---------------------------------------

inline void Temperature::Print(ostream & out) const
{
   out << myDegrees << ' ' << myScale;
}



// -------- Add a double to a Temperature ------------------------

inline Temperature Temperature::operator+(double rightOperand) const
{
   return Temperature(myDegrees + rightOperand, myScale);
}

// -------- ostream output -----------------------------------------------

inline ostream & operator<<(ostream & out, const Temperature & theTemp)
{
   theTemp.Print(out);  // tell theTemp to print itself
   return out;
}

// -------- istream input ------------------------------------------------

inline istream & operator>>(istream & in, Temperature & theTemp)
{
   theTemp.Read(in);
   return in;
}

// -------- less than -----------------------------------------------------

inline bool Temperature::operator<(const Temperature & rightOperand) const
{
   return Compare(rightOperand) < 0;
}

// -------- is equal to ----------------------------------------------------

inline bool Temperature::operator==(const Temperature & rightOperand) const
{
   return Compare(rightOperand) == 0;
}

#endif

