/******************************************************************************************** example 9 -- clocktime.cpp making military time into clocktime ********************************************************************************************/ #include "clocktime.h" #include <iostream> using namespace std; //------- Initialize static class data ------- bool clocktime::AMPM = false; //------- Enhanced Default Constructor ------- clocktime::clocktime(const int h, const int m, const int s) { hour=0; minute = 0; second = 0; addSecond(s); addMinute(m); addHour(h); } //------- Manage static class data ------- void clocktime::show24H(const bool& set) { AMPM = (!set); } void clocktime::showAMPM(const bool& set) { AMPM = set; } //------- Print the object in "pretty" format ------- void clocktime::print(ostream& out) const { if (AMPM) { if ((hour > 0) && (hour < 10)) out << '0'; if (hour == 0) out << 12; else if (hour > 12) out << hour - 12; else out << hour; } else { if (hour < 10) out << '0'; out << hour; } out << ':'; if (minute < 10) out << '0'; out << minute << ':'; if (second < 10) out << '0'; out << second; if (AMPM) { if (hour < 12) out << " AM"; else out << " PM"; } }; //------- "managed" addition functions ------- void clocktime::addHour(const int h) { int sum = hour + h; if (sum > -1) hour = sum % 24; else hour = (sum + 24) % 24; } void clocktime::addMinute(const int m) { int sum = minute + m; if (sum > -1) { addHour(sum / 60); minute = sum % 60; } else { addHour((sum - 60) / 60); minute = (sum + 60)% 60; } } void clocktime::addSecond(const int s) { int sum = second + s; int mag = s/60; if (sum > -1) { addMinute(sum/60); second = sum % 60; } else { addMinute((sum - 60) / 60); second = (sum + 60*(mag+1)) % 60; } } void clocktime::addSame(const clocktime& mt) { addHour(mt.hour); addMinute(mt.minute); addSecond(mt.second); } //------- user-defined operators ------- clocktime clocktime::operator+(const clocktime& mt) const { clocktime temp; temp.addSame(*this); temp.addSame(mt); return temp; } ostream& operator<<(ostream& out, const clocktime& mt) { mt.print(out); return out; }