Working with overloading unary, binary, etc etc operators

We are using classes to do this, based on Times.

My << operator is suppose to output each Data Member of the class while calling a reduce function. However everything is required to be a const so my reduce function can't change it.

My second issue is with my != function. I may be missing the obvious but I can't get it to work.

Below are my cpp file with function definitions and header file with the class and function prototypes.

Code:
Time.cpp

#include "Time.h"
#include <iostream>

using namespace std;

ostream& operator << (ostream& ostr, const Time& rhs)
{
    ostr << rhs.Hour.Reduce() << ":" << rhs.Minute.Reduce() << ":" << rhs.Second.Reduce();
    return ostr;
}

istream& operator >> (istream& istr,  Time& rhs)
{
   istr >> rhs.Hour >> rhs.Minute >> rhs.Second;
   return istr;
}

Time::Time()
{
	Hour = 0;
        Minute = 0;
        Second = 0;
}

Time::Time(int H, int M, double S)
{
   Hour = H;
   Minute = M;
   Second = S;
}

Time::Time(const Time& V)
{
	Hour = V.Hour;
	Minute = V.Minute;
	Second = V.Second;
}

const Time Time::operator + (const Time& rhs) const
{
	return  Time( Hour + rhs.Hour, Minute + rhs.Minute, Second + rhs.Second);
}

const Time Time::operator - (const Time& rhs) const
{
  return operator + ( -rhs );

}

const Time Time:: operator - () const
{
    return Time(-Hour,Minute,Second);
}

const Time Time::operator + () const
{
   return *this;
}

const bool Time::operator < (const Time& rhs) const
{
	return (Hour < rhs.Hour) || (Hour <= rhs.Hour && Minute < rhs.Minute)
		|| (Hour <= rhs.Hour && Minute <= rhs.Minute && Second < rhs.Second);
}

const bool Time::operator == (const Time& rhs) const
{
  return (Hour == rhs.Hour && Minute == rhs.Minute && Second == rhs.Second);
}

const bool Time::operator <= (const Time& rhs) const
{
  return operator < (rhs) || operator == (rhs );
}

const bool Time::operator > (const Time& rhs) const
{
  return !(operator <= (rhs) ) ;
}

const bool Time::operator >= (const Time& rhs) const
{
  return operator > (rhs) || operator == (rhs) ;
}


const Time Time::operator = (const Time& rhs)
{
    Hour = rhs.Hour;
    Minute = rhs.Minute;
    Second = rhs.Second;
    return rhs;
}

const bool Time::operator != (const Time& rhs) const
{
    return !(operator == rhs());
}

const Time Time::operator ++ ()
{
    operator = (operator + (Time(1,1,1)));
    return *this;
}

const Time Time::operator ++ (int)
{
   Time Tmp(*this);
   operator = ( operator + (Time(1,1,1))) ;
   return Tmp;
}


void Time::Reduce()
{
	int count;

	count = static_cast <int> (Second) / 60;
	Second = static_cast <int> (Second) % 60;
	Minute += count;

	count = Minute / 60;
	Minute = Minute % 60;
	Hour += count;

	Hour = Hour % 24;
}
Code:
Time.h

#include <iostream>

using namespace std;

class Time
{
private:
       int Hour;
       int Minute;
       int Second;
       void Reduce();
public:
	   Time();
	   Time(int H, int M, double S);
	   Time(const Time& V);
	   const Time operator + (const Time& rhs) const ;  //Add two times
	   const Time operator - (const Time& rhs) const ;  //sub two times
	   const bool operator < (const Time& rhs) const;  // < two times
           const bool operator == (const Time& rhs) const;  // == two times
	   const bool operator <= (const Time& rhs) const;  // <= two times
	   const bool operator > (const Time& rhs) const;  // > two times
	   const bool operator >= (const Time& rhs) const;  // > two times
           const bool operator != (const Time& rhs) const;
	   const Time operator = (const Time& rhs);  // assignment times
	   const Time operator - () const;
	   const Time operator + () const;
	   const Time operator ++ ();
	   const Time operator ++ (int);
	   friend ostream& operator << (ostream& ostr, const Time& rhs);
           friend istream& operator >> (istream& istr,  Time& rhs);
};
Thanks in advance for any advice/assistance