253: #include <iostream> 254: #include <iomanip> 255: #include <string> 256: #include <vector> 257: 258: using namespace std; 259: 260: #include "ccc_time.h" 261: 262: class Clock 263: { 264: public: 265: /** 266: Constructs a clock that can tell the local time. 267: @param use_military true if the clock uses military format 268: */ 269: Clock(bool use_military); 270: 271: /** 272: Gets the location of this clock. 273: @return the location 274: */ 275: virtual string get_location() const; 276: 277: /** 278: Gets the hours of this clock. 279: @return the hours, in military or am/pm format 280: */ 281: virtual int get_hours() const; 282: 283: /** 284: Gets the minutes of this clock. 285: @return the minutes 286: */ 287: int get_minutes() const; 288: 289: /** 290: Checks whether this clock uses miltary format. 291: @return true if miltary format 292: */ 293: bool is_military() const; 294: private: 295: bool military; 296: }; 297: 298: Clock::Clock(bool use_military) 299: { 300: military = use_military; 301: } 302: 303: string Clock::get_location() const 304: { 305: return "Local"; 306: } 307: 308: int Clock::get_hours() const 309: { 310: Time now; 311: int hours = now.get_hours(); 312: if (military) return hours; 313: if (hours == 0) 314: return 12; 315: else if (hours > 12) 316: return hours - 12; 317: else 318: return hours; 319: } 320: 321: int Clock::get_minutes() const 322: { 323: Time now; 324: return now.get_minutes(); 325: } 326: 327: bool Clock::is_military() const 328: { 329: return military; 330: } 331: 332: class TravelClock : public Clock 333: { 334: public: 335: /** 336: Constructs a travel clock that can tell the time 337: at a specified location 338: @param mil true if the clock uses military format 339: @param loc the location 340: @param diff the time difference from the local time 341: */ 342: TravelClock(bool mil, string loc, int diff); 343: string get_location() const; 344: int get_hours() const; 345: private: 346: string location; 347: int time_difference; 348: }; 349: 350: TravelClock::TravelClock(bool mil, string loc, int diff) 351: : Clock(mil) 352: { 353: location = loc; 354: time_difference = diff; 355: while (time_difference < 0) 356: time_difference = time_difference + 24; 357: } 358: 359: string TravelClock::get_location() const 360: { 361: return location; 362: } 363: 364: int TravelClock::get_hours() const 365: { 366: int h = Clock::get_hours(); 367: if (is_military()) 368: return (h + time_difference) % 24; 369: else 370: { 371: h = (h + time_difference) % 12; 372: if (h == 0) return 12; 373: else return h; 374: } 375: } 376: 377: int main() 378: { 379: vector<Clock*> clocks(3); 380: clocks[0] = new Clock(true); 381: clocks[1] = new TravelClock(true, "Rome", 9); 382: clocks[2] = new TravelClock(false, "Tokyo", -7); 383: 384: for (int i = 0; i < clocks.size(); i++) 385: { 386: cout << clocks[i]->get_location() << " time: " 387: << clocks[i]->get_hours() << ":" 388: << setw(2) << setfill('0') 389: << clocks[i]->get_minutes() 390: << setfill(' ') << "\n"; 391: } 392: return 0; 393: } 394: