【c++】日期类

先定义成员变量:

class Data
{
 
public:
 
private:
	int _year;
	int _month;
	int _day;
};
 

这里是成员函数

#include<iostream>
using namespace std;
class Date
{
public:

	friend ostream& operator<<(ostream& out, const Date& d);
	friend istream& operator>>(istream& in, Date& d);

	int Getmonthday(int year, int month)
	{
		int month_day[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
		if ((month == 2) && (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
		{
			return month_day[month] + 1;
		}

		return month_day[month];
	}
	//构造
	Date(int year = 1, int month = 1, int day = 1)
	{
		_year = year;
		_month = month;
		_day = day;
		if (!(year > 0 && month > 0 && month < 13 && day>0 && day <= Getmonthday(year, month)))
		{
			cout << "日期非法" << endl;
		}
	}
	//析构
	~Date()
	{
		_year = 0;
		_month = 0;
		_day = 0;
	}
	//拷贝构造
	Date(const Date& d)
	{
		_year = d._year;
		_month = d._month;
		_day = d._day;
	}
	//赋值重载  d1=d2
	Date& operator=(const Date& d)
	{
		_year = d._year;
		_month = d._month;
		_day = d._day;

		return *this;
	}
	//打印
	void print()
	{
		cout << _year << "-" << _month << "-" << _day << endl;
	}

	//==
	bool operator==(const Date& d)
	{
		return _year == d._year && _month == d._month && _day == d._day;  //相等为1
	}
	//  > 
	bool operator>(const Date& d)
	{
		if (_year > d._year)
		{
			return  true;
		}
		else if (_year == d._year && _month > d._month)
		{
			return true;
		}
		else if (_year == d._year && _month == d._month && _day > d._day)
		{
			return true;
		}

		return false;


	}

	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);
	}


	Date& operator+=(int day)  
	{
		if (day < 0)
		{
			//return *this -= -day;
			return *this -= abs(day);
		}

		_day += day;

		while (_day > Getmonthday(_year, _month))
		{
			_day -= Getmonthday(_year, _month);
			_month++;

			if (_month == 13)
			{
				++_year;
				_month = 1;
			}
		}

		return *this;
	}
//+不一定是真的+上去,也许是在表达式里面进行的一个判断过程,所以我们不能直接用+=的思想。
	Date& operator+(int day) 
	{
		Date ret(*this);
		ret += day;
		return ret;
	}

	Date& operator-=(int day)
	{
		if (day < 0)
		{
			//return *this -= -day;
			return *this += abs(day);
		}

		_day -= day;
		while (_day <= 0)
		{
			--_month;
			if (_month == 0)
			{
				--_year;
				_month = 12;
			}

			_day += Getmonthday(_year, _month);
		}

		return *this;
	}

	Date& operator-(int day)  //日期-天数
	{
		Date ret(*this);
		ret -= day;
		return ret;
	}
	//前置++
	Date& operator++()
	{
		*this += 1;
		return *this;
	}
	//后置++
	Date& operator++(int) 
	{
		Date ret(*this);
		*this += 1;
		return ret;
	}
	Date& operator--() //前置--
	{
		*this -= 1;
		return *this;
	}
	Date& operator--(int) //后置--
	{
		Date ret(*this);
		*this -= 1;
		return ret;
	}

	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)
		{
			++n;
			++min;

		}

		return n * flag;

	}
private:
	int _year;
	int _month;
	int _day;

};



inline ostream& operator<<(ostream& out, const Date& d) //重载cout
{

	out << d._year << "年" << d._month << "月" << d._day << "日" << endl;
	return out;
}
inline istream& operator>>(istream& in, Date& d)  //重载cin 
{
	in >> d._year >> d._month >> d._day;
	return in;
}

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bite-ccc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值