Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <iomanip>
- #include <sstream>
- using namespace std;
- class Date
- {
- public:
- Date(int mm=0, int dd=0, int yy=0)
- {
- year = yy;
- month = mm;
- day = dd;
- }
- //another way to construct the object! "12/31/2019"
- Date(string dateString)
- {
- char temp;
- istringstream(dateString) >> month >> temp >> day >> temp >> year;
- }
- //alternatively, << operator can be implemented!
- void display()
- {
- cout << month << '/' << day << '/' << year;
- }
- //function to return true if year is leap year, false otherwise.
- bool isLeapYear()
- {
- if (year % 4)
- return false;
- // year is divisible by 4
- if (year % 400 == 0)
- return true;
- // year is not divisible by 400
- if (year % 100 == 0)
- return false;
- // year is divisible by 4, but not divisible by 100
- return true;
- }
- //increment the day, if needed, increment the month,
- //if needed, increment the year
- void increment()
- {
- //static makes this array to be allocated like a global variable
- //but it is used only within this function
- static int daysInMonths[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
- if ((month == 2) && isLeapYear())
- daysInMonths[2] = 29;
- else
- daysInMonths[2] = 28;
- //increment the day, then make necessary adjustments
- day++;
- if (day > daysInMonths[month]) {
- day = 1;
- month++;
- if (month > 12) {
- month = 1;
- year++;
- }
- }
- }
- private:
- int day, month, year;
- };
- //class to store time and display and do increment() operation
- class Time
- {
- public:
- Time(int hh=0, int mm=0, int ss=0)
- {
- hour = hh;
- minute = mm;
- second = ss;
- }
- Time(string timeString)
- {
- char temp;
- istringstream(timeString) >> hour >> temp >> minute >> temp >> second;
- }
- //second: 59 --> 60: increment minute
- //minute: 59 --> 60: increment hour
- //hour: 23-->24: hour=0
- //return true if the day rolls over, return false in all other circumstances.
- bool increment()
- {
- second++;
- if (second == 60) {
- second = 0;
- minute++;
- if (minute == 60) {
- minute = 0;
- hour++;
- if (hour == 24) {
- hour = 0;
- return true;
- }
- }
- }
- return false;
- }
- void display()
- {
- cout << setfill('0');
- if (hour == 0)
- cout << 12 << ':' << setw(2) << minute << ':' << setw(2) << second << " AM";
- else if (hour < 12)
- cout << setw(2) << hour << ':' << setw(2) << minute << ':' << setw(2) << second << " AM";
- else if (hour == 12)
- cout << setw(2) << hour << ':' << setw(2) << minute << ':' << setw(2) << second << " PM";
- else
- cout << setw(2) << hour-12 << ':' << setw(2) << minute << ':' << setw(2) << second << " PM";
- }
- private:
- int hour, minute, second;
- };
- //composition - we used 2 objects: Date & Time objects
- class DateTime
- {
- public:
- //pass the necessary parameters to each constructor
- //to populate member objects
- DateTime(int mm=0, int dd=0, int yy=0, int hh=0, int mmm=0, int ss=0)
- {
- date = Date(mm, dd, yy);
- time = Time(hh, mmm, ss);
- }
- //another way to build DateTime object
- DateTime(Date dt, Time tt) {
- date = dt;
- time = tt;
- }
- //another way to build DateTime object
- DateTime(string dateStr, string timeStr) {
- date = Date(dateStr);
- time = Time(timeStr);
- }
- //another way to build DateTime object "1/1/2010 23:55:15"
- DateTime(string combinedStr) {
- string s1, s2;
- istringstream(combinedStr) >> s1 >> s2;
- DateTime(s1, s2);
- }
- //increment by one second
- void increment()
- {
- // if day rolled over, time.increment() returns true -> increment the date
- if (time.increment())
- date.increment();
- }
- void display()
- {
- date.display();
- cout << " ";
- time.display();
- }
- private:
- Date date;
- Time time;
- };
- /* Sample inputs:
- D 1/1/2010 40
- T 23:55:15 1000
- DT 1/1/2010 23:55:15 1000
- */
- int main()
- {
- Date date("1/1/1990");
- Time time("12:15:15");
- DateTime *dtp = new DateTime(date, time);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement