阿鑫来了  
#include<stdio.h>
#include<iostream>

using namespace std;

class Date{
public:
    Date(int y=1,int m=1,int d=1){

        //判断是否有效
        if (y <= 0 || m <= 0 || m > 12 ||
            d<0 || d>getDay(y, m)){
            //日期无效
            _y = 1;
            _m = 1;
            _d = 1;
            cout << "日期无效,设置为默认值:1-1-1" << endl;
        }
        else{
        _y = y;
        _m = m;
        _d = d;
        }
    }

    int getDay(int y, int m){
        static int days[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
        int day = days[m];

        //如果是2月,而且为闰年,修改天数
        if (m == 2 && (((y % 4 == 0) && (y % 100 != 0)) || y % 400 == 0)){
            day += 1;
            return day;
        }
    }

    //日期的运算   Date+int
    Date& operator+=(int day){
        //判断日期是否为负数
        if (day < 0)
            return *this -= -day;

    //相加天数
        _d += day;

        //判断天数是否溢出
        while (_d > getDay(_y, _m)){
            //减去当月的天数
            _d -= getDay(_y, _m);

            //月份进位
            ++_m;

            //判断月份是否溢出
            if (_m == 13){
                //下一年1月
                ++_y;
                _m = 1;
            }
        }
        //返回相加后的结果
        return *this;
    }


    //日期的运算   Date-int
    Date& operator-=(int day){
        //判断日期是否为负数
        if (day < 0)
            return *this += -day ;

        _d -= day;
        while (_d <= 0){
        //用上一个月的天数回补
            --_m;
            //判断月份是否溢出
            if (_m == 0){
            //需要回退到上一年的12月
                _y--;
                _m = 12;
            }
            _d += getDay(_y, _m);
        }
        return *this;
    }
     
    //==日期是否相等
    bool operator==(const Date& d){
        return _y == d._y
            &&_m == d._m
            &&_d == d._d;
    }
     
    //!=
    bool operator!=(const Date& d){
        return !(*this == d);
    }

    //  >
    bool operator>(const Date& d){
        if (_y > d._y)
            return true;
        else if (_y == d._y){
            if (_m > d._m)
                return true;
            else if (_m == d._m){
                if (_d > d._d)
                    return true;
            }
        }
        return true;

    }

    //< 
    bool operator<(const Date& d){
        return !(*this >= d);
    }

    //>=
    bool operator>=(const Date& d){
        return *this > d || *this == d;
    }

    //<=
    bool operator<=(const Date& d){
        return !(*this > d);
    }

private:
    int _y;
    int _m;
    int _d;
};

void test(){
    Date d1(2021, 2, 4);
    Date d2(2021, 2, 4);
    Date d3(2021, 2, 4);
    Date d4(2021, 2, 4);

    d1.operator+=(1);

    d2 += 30;

    d3 += 90;

    d4 += 360;

    d1 -= 1;

    d2 -= 30;

    d3 -= 90;

    d4 -= 360;
}

int main(){
    test();
    system("pause");
    return 0;
}

 

posted on 2021-04-26 16:58  阿鑫来了  阅读(164)  评论(0)    收藏  举报