#include <iostream> #include <iomanip> #include <string> using namespace std; #include "ccc_time.h" class Clock { public: Clock(bool use_military); string get_location() const; int get_hours() const; int get_minutes() const; bool is_military() const; private: bool military; }; Clock::Clock(bool use_military) { military = use_military; } string Clock::get_location() const { return "Local"; } int Clock::get_hours() const { Time now; int hours = now.get_hours(); if (military) return hours; if (hours == 0) return 12; else if (hours > 12) return hours - 12; else return hours; } int Clock::get_minutes() const { Time now; return now.get_minutes(); } bool Clock::is_military() const { return military; } class TravelClock : public Clock {
public: /** Constructs a travel clock that can tell the time at a specified location @param mil true if the clock uses military format @param loc the location @param diff the time difference from the local time */ TravelClock(bool mil, string loc, int diff); string get_location() const; int get_hours() const; private: string location; int time_difference; }; TravelClock::TravelClock(bool mil, string loc, int diff) : Clock(mil) { location = loc; time_difference = diff; while (time_difference < 0)
time_difference = time_difference + 24; } string TravelClock::get_location() const { return location; } int TravelClock::get_hours() const { int h = Clock::get_hours(); if (is_military()) return (h + time_difference) % 24; else { h = (h + time_difference) % 12; if (h == 0) return 12; else return h; } } int main() { Clock clock1(true); TravelClock clock2(true, "Rome", -1); TravelClock clock3(false, "Tokyo", 5); cout << clock1.get_location() << " time: "
<< clock1.get_hours() << ":" << setw(2) << setfill('0')
<< clock1.get_minutes()
<< setfill(' ') << "\n"; cout << clock2.get_location() << " time: "
<< clock2.get_hours() << ":" << setw(2) << setfill('0')
<< clock2.get_minutes()
<< setfill(' ') << "\n"; cout << clock3.get_location() << " time: "
<< clock3.get_hours() << ":" << setw(2) << setfill('0')
<< clock3.get_minutes()
<< setfill(' ') << "\n"; return 0; }