#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; }