/******************************************************************************************** example 10 -- clocktime.cpp using a single member data to handle all three fields ********************************************************************************************/ #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) { 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; } //------- Retrieve individual entries ------- const int clocktime::getHour() const { return second / 3600; } const int clocktime::getMin() const { int temp = second % 3600; return temp / 60; } const int clocktime::getSec() const { return second % 60; } //------- Print the object in "pretty" format ------- void clocktime::print(ostream& out) const { if (AMPM) { if ((getHour() > 0) && (getHour() < 10)) out << '0'; if (getHour() == 0) out << 12; else if (getHour() > 12) out << getHour() - 12; else out << getHour(); } else { if (getHour() < 10) out << '0'; out << getHour(); } out << ':'; if (getMin() < 10) out << '0'; out << getMin() << ':'; if (getSec() < 10) out << '0'; out << getSec(); if (AMPM) { if (getHour() < 12) out << " AM"; else out << " PM"; } }; //------- "managed" addition functions ------- void clocktime::addHour(const int h) { addSecond(h * 3600); } void clocktime::addMinute(const int m) { addSecond(m * 60); } void clocktime::addSecond(const int s) { int sum = second + s; if (sum > -1) second = (second + s) % (3600 * 24); else second = 0; } void clocktime::addSame(const clocktime& mt) { 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; }