【C++】日期类的创建

#include<iostream>

using namespace std;
class Date{
	public:
		//天数
		int getDay(int year, int month){
			int dayarr[13] = { 0,31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
			int day = dayarr[month];
			if (month == 2 && (year %4== 0 && year%100!= 0) || year%400 == 0){
				day += 1;
			}
			return day;
		}

		//全缺省构造函数
		Date(int year=2021,int month=1,int day=1){
			if (year<0 || month<0 || month>12 || day>getDay(year,month)){
				_year = 1;
				_month = 1;
				_day = 1;
				cout << "非法日期!" << endl;
				//非法设置111
			}
			else{
				_year = year;
				_month = month;
				_day = day;
			}
		}

		//运算符重载函数
		Date& operator+=(int day){
			_day += day;
			while (_day > getDay(_year, _month)){
				_day -= getDay(_year, _month);
				++_month;
				while (_month > 13){
					_year++;
					_month = 1;
				}
			}
			return *this;
		}

		Date operator+(int day){
			Date copy(*this);
			copy = copy + day;
			return copy;
		}

		//前置
		Date& operator++(){
			return *this += 1;
		
		}

		//后置(参数仅做区分,构成函数重载)
		//返回临时变量不可以用引用返回值类型
		Date operator++(int a){
			Date copy(*this);
			copy += 1;
			return copy;
		}

		Date& operator-=(int day){
			_day -= day;
			while (day <= 0){
				--_month;

				if (_month == 0){
					--_year;
				}
				_month = 12;
				_day += getDay(_year, _month);
			}
			return *this;
		}


		//前置
		Date& operator--(){
			return *this -= 1;
		}
		
		//后置
		Date operator--(int a){
			Date copy(*this);
			copy -= 1;
			return copy;
		}

		bool operator==(const Date&d){
			return (_year == d._year&&_month == d._month&&_day == d._day);
		}

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

		bool operator>(const Date&d){
			if (_year > d._year){
				return true;
			}
			else if (_year == d._year){
				if (_month > d._month){
					return true;
				}
				else if (_month == d._month){
					if (_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);
		}


		int operator-(const Date&d){
			Date max = *this;
			Date min=d;
			int flag = 1;
			if (min > max){
				flag = -1;
				max = d;
				min = *this;
			}
			int count = 0;
			while (max != min){
				min++;
				count++;
			}
			return flag*count;
		}

	private:
		int _year;
		int _month;
		int _day;

};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值