/********************************************************************************************
date.h
********************************************************************************************/
#include <iostream>
using namespace std;

//class definition
class Date {
    private:
        int year;  // 0-????
        int month; // 0-11 --> prints or returns 1-12
        int day;   // 0-29 --> prints or returns 1-30
        static char separator; //holds the separator for all objects
    public:
        Date(const int m=1, const int d=1, const int y=1980); //constructor with inits

        //------- Print/Display routines -------
        void setSeparator(const char& c = '/') {
            separator = c;
        }
        void print(ostream& out = cout) const; 
        friend ostream& operator<<(ostream&, const Date&);

        //------- Inspect (look at) the individual member data -------
        int getYear() const {
            return year;
        }
        int getMonth() const {
            return month + 1;
        }
        int getDay() const {
            return day + 1;
        }

        //------- Add to specific data members -------
        void addYear(const int y) {
            if (y > 0)
                year += y;
        }

        void addMonth(const int m) {
            if (m > 0) {
                int sum = month + m;
                addYear(sum/12);
                month = sum % 12;
            }
        }

        void addDay(const int d) {
            if (d > 0) {
                int sum = day + d;
                addMonth(sum/30);
                day = sum % 30;
            }
        }

        //------- Add two of the same type together -------
        void addDate(const Date& D) {
            addYear(D.year);
            addMonth(D.month);
            addDay(D.day);
        }

        Date operator+(const Date& D) const {
            Date temp = D;
            temp.addYear(year);
            temp.addMonth(month);
            temp.addDay(day);
            return temp;
        }

};