【C++】日期类的实现(类的默认函数)

该文章介绍了一个C++实现的Date类,包括获取月份天数的方法,全缺省构造函数,拷贝构造函数,赋值运算符重载,以及日期加减、比较等运算符的重载实现。类能够处理日期的合法性和计算,如日期+/-天数,日期的比较等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

class Date
{
public:
    // 获取某年某月的天数
    int GetMonthDay(int year, int month)
    {
        static int days[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
        int day = days[month];
        if (month == 2
            && ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)))
        {
            day += 1;
        }
        return day;
    }

    // 全缺省的构造函数
    Date(int year = 1900, int month = 1, int day = 1)
    {
        if (year >= 0 && month > 0 && month < 13 && day>0 && day <= GetMonthDay(year, month))
        {
            _year = year;
            _month = month;
            _day = day;
        }
        else
        {
            cout << "非法日期" << endl;
        }
    }
    // 拷贝构造函数
    // d2(d1)
    Date(const Date& d)
    {
        _year = d._year;
        _month = d._month;
        _day = d._day;
    }

    // 赋值运算符重载
    // d2 = d3 -> d2.operator=(&d2, d3)
    Date& operator=(const Date& d)
    {
        _year = d._year;
        _month = d._month;
        _day = d._day;
        return *this;
    }
    // 析构函数
    ~Date()
    {
        _year = 0;
        _month = 0;
        _day = 0;
    }
    // 日期+=天数
    Date& operator+=(int day)
    {
        if (day < 0)
        {
            *this -= -day;
            while (_day > GetMonthDay(_year, _month))
            {
                _day -= GetMonthDay(_year, _month);
                _month++;
                if (_month > 12)
                {
                    ++_year;
                    _month = 1;
                }
            }
        }
        return *this;
    }
    // 日期+天数
    Date operator+(int day)
    {
        Date tmp(*this);
        tmp += day;
        return tmp;
    }
    // 日期-=天数
    Date& operator-=(int day)
    {
        if (day > 0)
        {
            *this += -day;
        }
        else
        {
            *this += day;
        }
        return *this;
    }
    // 日期-天数
    Date operator-(int day)
    {
        Date tmp(*this);
        tmp -= day;
        return tmp;
    }
    // 前置++
    Date& operator++()
    {
        *this += 1;
        return *this;
    }
    // 后置++
    Date operator++(int)
    {
        Date tmp(*this);
        *this += 1;
        return tmp;
    }
    // 后置--
    Date operator--(int)
    {
        Date tmp(*this);
        *this -= 1;
        return tmp;
    }
    // 前置--
    Date& operator--()
    {
        *this -= 1;
        return *this;
    }

    // >运算符重载
    bool operator>(const Date& d)
    {
        return _year > d._year || (_year == d._year && _month > d._month) || (_year == d._year && _month == d._month && _day > d._day);
    }
    // ==运算符重载
    bool operator==(const Date& d)
    {
        return _year == d._year && _month == d._month && _day == d._day;
    }
    // >=运算符重载
    inline bool operator >= (const Date& d)
    {
        return *this>d||*this==d;
    }

    // <运算符重载
    bool operator < (const Date& d)
    {
        return !(*this >= d);
    }
    // <=运算符重载
    bool operator <= (const Date& d)
    {
        return !(*this>d);
    }
    // !=运算符重载
    bool operator != (const Date& d)
    {
        return !(*this==d);
    }
    // 日期-日期 返回天数
    int operator-(const Date& d)
    {
        Date max = *this;
        Date min = d;
        int flag = 1;
        if (*this < d)
        {
            max = d;
            min = *this;
            flag = -1;
        }
        int n = 0;
        while (min != max)
        {
            ++min;
            ++n;
        }
        return n * flag;
    }
private:
    int _year;
    int _month;
    int _day;
};

麻烦同学们关注点赞加收藏,后续会继续更新关于C/C++与Linux网络等相关内容!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值