【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;

};

猜你喜欢

转载自blog.csdn.net/zhaocx111222333/article/details/114685036