#include
#include
using namespace std;

class MyTime
{
	int m_hour;
	int m_min;

public:
	MyTime(int min = 0);
	MyTime(int hour, int min);
	MyTime operator+(MyTime t);
	friend MyTime operator+(MyTime t, int min);
	MyTime operator-(int min);
	friend MyTime operator-(MyTime t1, MyTime t2);
	MyTime operator*(double k);
	friend MyTime operator*(double k, MyTime t);
	MyTime operator=(MyTime t);
	friend int operator>(MyTime t1, MyTime t2);
	void Print_Time(string obj);
	friend int Compute_Total_Mins(MyTime t);
	MyTime Make_Time_Object(int min);
};

MyTime::MyTime(int min)
{
	m_hour = min / 60;
	m_min = min % 60;
	if (m_min < 0 || m_hour < 0)
	{
		m_min = 0;
		m_hour = 0;
	}


}

MyTime::MyTime(int hour, int min)
{
	if (min >= 60)
	{
		m_hour = hour + min / 60;
		m_min = min % 60;
	}
	else if (min < 0 || hour < 0)
	{
		m_min = 0;
		m_hour = 0;
	}
	else
	{
		m_hour = hour;
		m_min = min;
	}
}

MyTime MyTime::operator+(MyTime t)
{
	MyTime temp;
	temp.m_hour = this->m_hour + t.m_hour;
	temp.m_min = this->m_min + t.m_min;
	if (temp.m_min < 0 || temp.m_hour < 0)
	{
		temp.m_min = 0;
		temp.m_hour = 0;
	}
	return temp;
}

MyTime operator+(MyTime t, int min)
{
	MyTime temp;
	temp.m_hour = t.m_hour;
	temp.m_min = t.m_min + min;
	if (temp.m_min > 60)
	{
		temp.m_hour = t.m_hour + temp.m_min / 60;
		temp.m_min = t.m_min + min % 60;
	}
	else if (temp.m_min < 0 || temp.m_hour < 0)
	{
		temp.m_min = 0;
		temp.m_hour = 0;
	}
	return temp;
}

MyTime MyTime::operator-(int min)
{
	MyTime temp;
	if (m_hour * 60 + m_min - min >= 0)
	{
		temp.m_hour = (m_hour * 60 + m_min - min) / 60;
		temp.m_min = (m_hour * 60 + m_min - min) % 60;
	}
	else
	{
		temp.m_hour = 0;
		temp.m_min = 0;
	}
	return temp;
}

MyTime operator-(MyTime t1, MyTime t2)
{
	MyTime temp;

	if (t1.m_min < 0 || t1.m_hour < 0 || t2.m_min < 0 || t2.m_hour < 0)
	{
		temp.m_hour = 0;
		temp.m_min = 0;
	}
	else if (t1.m_min - t2.m_min < 0)
	{
		while (t1.m_min - t2.m_min > 0)
		{
			temp.m_hour = t1.m_hour - t2.m_hour - 1;
			temp.m_min = t1.m_min - t2.m_min + 60;
		}
	}
	else
	{
		temp.m_hour = t1.m_hour - t2.m_hour;
		temp.m_min = t1.m_min - t2.m_min;
	}
	return temp;
}

MyTime MyTime::operator*(double k)
{
	MyTime temp;


	temp.m_hour = ((m_hour * 60 + m_min) * (int)k) / 60;
	temp.m_min = ((m_hour * 60 + m_min) * (int)k) % 60;

	return temp;
}

MyTime operator*(double k, MyTime t)
{
	MyTime temp;
	temp.m_hour = (int)(k * (t.m_hour * 60 + t.m_min)) / 60;
	temp.m_min = (int)(k * (t.m_hour * 60 + t.m_min)) % 60;
	return temp;
}

MyTime MyTime::operator=(MyTime t)
{
	m_hour = t.m_hour;
	m_min = t.m_min;
	return *this;
}

int operator>(MyTime t1, MyTime t2)
{
	if (t1.m_hour * 60 + t1.m_min > t2.m_hour * 60 + t2.m_min)
	{
		return 1;
	}
	else if (t1.m_hour * 60 + t1.m_min == t2.m_hour * 60 + t2.m_min)
	{
		return 0;
	}
	else
	{
		return -1;
	}
}

void MyTime::Print_Time(string obj)
{

	if (m_hour > 0)
	{
		cout << obj << " : " << m_hour << "시간 " << m_min << "분" << endl;
	}
	else if (m_hour <= 0)
	{
		cout << obj << " : " << m_min << "분" << endl;
	}

}

int Compute_Total_Mins(MyTime t)
{
	t.m_min = t.m_hour * 60 + t.m_min;
	t.m_hour = 0;
	t.Print_Time("의 total mins");
	return 0;
}

MyTime MyTime::Make_Time_Object(int min)
{
	MyTime temp;
	temp.m_hour = min / 60;
	temp.m_min = min % 60;

	return temp;
}

int main()
{
	MyTime ob1(135), ob2(2, 90), ob3(3, -30), result(0);

	ob1.Print_Time("ob1");
	ob2.Print_Time("ob2");
	ob3.Print_Time("ob3");

	cout << "ob1";
	Compute_Total_Mins(ob1);
	cout << "bo2";
	Compute_Total_Mins(ob2);

	result = ob1 + ob2;
	result.Print_Time("ob1 + ob2");

	result = ob1 + 80;
	result.Print_Time("ob1 + 80");

	result = ob1 - ob2;
	result.Print_Time("ob1 - ob2");

	result = ob2 - ob1;
	result.Print_Time("ob2 - ob1");

	result = ob1 - 45;
	result.Print_Time("ob1 - 45");

	result = ob2 * 10;
	result.Print_Time("ob2 * 10");

	result = 3.75*ob2;
	result.Print_Time("3.75 * ob2");

	ob1 > ob2;
	if (ob1 > ob2 == 1)
	{
		cout << "ob1의 시간은 ob2보다 큽니다.\n";
	}
	else if (ob1 > ob2 == 0)
	{
		cout << "ob1의 시간은 ob2와 같습니다.\n";
	}
	else if (ob1 > ob2 == -1)
	{
		cout << "ob1의 시간은 ob2보다 작습니다.\n";
	}

	ob1 = ob2;
	result = ob1;
	result.Print_Time("ob1 = ob2");

	ob1 > ob2;
	if (ob1 > ob2 == 1)
	{
		cout << "ob1의 시간은 ob2보다 큽니다.\n";
	}
	else if (ob1 > ob2 == 0)
	{
		cout << "ob1의 시간은 ob2와 같습니다.\n";
	}
	else if (ob1 > ob2 == -1)
	{
		cout << "ob1의 시간은 ob2보다 작습니다.\n";
	}

	return 0;
}