#include <iostream>
#include <iomanip>
#include <string>
#include <vector>
using namespace std;
#include "ccc_time.h"
class Clock {
public:
Clock(bool use_military);
virtual string get_location() const;
virtual 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:
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()
{ vector<Clock*> clocks(3);
clocks[0] = new Clock(true);
clocks[1] = new TravelClock(true, "Rome", -1);
clocks[2] = new TravelClock(false, "Tokyo", 5);
for (int i = 0; i < clocks.size(); i++)
{ cout << clocks[i]->get_location() << " time: "
<< clocks[i]->get_hours() << ":"
<< setw(2) << setfill('0')
<< clocks[i]->get_minutes()
<< setfill(' ') << "\n";
}
return 0;
}