C++:日期类的实现

12 篇文章 0 订阅


所谓的日期类,就是能对日期进行加减天数和减日期求天数之间的运算,运用到了C++中类以及运算符重载的相关知识,下面我们来用C++将日期类实现以下。

Date.h:用来定义日期类的成员变量和成员函数

#ifndef DATE_H__
#define DATE_H__
#include <iostream>
using namespace std;

class Date
{
private:
	int m_year;
	int m_month;
	int m_day;
public:
	Date(int _year , int _month , int _day );      //带有缺省参数的构造函数
	Date(const Date& _date);                                     //拷贝构造函数
	~Date();                                                     //析构函数

	int Get_year();
	int Get_month();
	int Get_day();
//设置
	void Set_year(const int year);
	void Set_month(const int month);
	void Set_day(const int day);

	int Day_of_month()const;                   //返回当月天数
	bool Judge_Leap()const;                         //判断是否为闰年

	void Print_Date();                         //打印日期

	bool operator==(const Date& _date);                         //判断两个日期是否相等
	bool operator>(const Date& _date);                          //判断两个日期的大小关系
	void operator++(int);                                          //自增运算
	void operator--(int);                                          //自减运算
	Date operator+(const int _day);                             //实现日期加天数
	Date operator-(const int _day);                             //实现日期减天数
	int  operator-(Date& _date);                         //实现日期减日期
};

#endif
Date.cpp:用来实现日期类中定义的成员函数
#include "Date.h"



Date::Date(int _year = 1996, int _month = 03, int _day = 24)      //带有缺省参数的构造函数
:m_year(_year)
, m_month(_month)
, m_day(_day)
{
	//
}
Date::Date(const Date& _date)                                     //拷贝构造函数
{
	m_year  = _date.m_year;
	m_day   = _date.m_day;
	m_month = _date.m_month;
}
Date::~Date()                                                     //析构函数
{
	//在析构函数中完成打印当前日期的工作?

}
int Date::Day_of_month() const
{
	int day = 0;
	switch (m_month)
	{
	case 1:
	case 3:
	case 5:
	case 7:
	case 8:
	case 10:
	case 12:
		day = 31;
		break;
	case 4:
	case 6:
	case 9:
	case 11:
		day = 30;
		break;
	case 2:
		if (Judge_Leap())
			day = 29;
		else
			day = 28;
		break;
	}
	return day;
}

int Date::Get_year()
{
	return this->m_year;
}
int Date::Get_month()
{
	return this->m_month;
}
int Date::Get_day()
{
	return this->m_day;
}
//设置
void Date::Set_year(const int year)
{
	m_year = year;
}
void Date::Set_month(const int month)
{
	m_month = month;
}
void Date::Set_day(const int day)
{
	m_day = day;
}


bool Date::Judge_Leap() const
{
	if ((m_year % 400) == 0 || ((m_year % 4) == 0 && (m_year % 100) != 0))
		return true;
	else
		return false;
}

void Date::Print_Date()                         //打印日期
{
	cout << m_year << "年" << m_month << "月" << m_day << "日" << endl;
}

Date Date::operator+(const int _day)                             //实现日期加天数
{
		m_day += _day;
		while (m_day > Day_of_month())
		{
			m_day -= Day_of_month();
			m_month++;
			if (m_month > 12)
			{
				m_month-=12;
				m_year++;
			}
		}
		return *this;
}
Date Date::operator-(const int _day)                             //实现日期减天数
{
	m_day -= _day;
	while (m_day <= 0)
	{
		m_month--;
		if (m_month <= 0)
		{
			m_year--;
			m_month += 12;
		}
		m_day += Day_of_month();
	}
	return *this;
}
bool Date::operator==(const Date& _date)                         //判断两个日期是否相等
{
	if (m_year == _date.m_year
		&&m_month == _date.m_month
		&&m_day == _date.m_day)
		return true;
	else
		return false;
}
bool Date::operator>(const Date& _date)                          //判断两个日期的大小关系
{
	if (m_year > _date.m_year)
		return true;
	else if (m_year == _date.m_year)
	{
		if (m_month > _date.m_month)
			return true;
		else if (m_month == _date.m_month)
		{
			if (m_day > _date.m_day)
				return true;
			else
				return false;
		}
		else
			return false;
	}
	else
		return false;
}
void Date::operator++(int)                                          //自增运算
{
	m_day++;
	if (m_day > Day_of_month())
	{
		m_day -= Day_of_month();
		m_month++;
		if (m_month > 12)
		{
			m_month -= 12;
			m_year++;
		}
	}
	
}
void Date::operator--(int)                                          //自减运算
{
	m_day--;
	if (m_day <= 0)
	{
		m_month--;
		if (m_month <= 0)
		{
			m_year--;
			m_month += 12;
		}
		m_day += Day_of_month();
	}
}
int Date::operator-(Date& _date)                         //实现日期减日期
{
	int days = 0;
	while (!(*this == _date))
	{
		if (*this > _date)
		{
			_date++;
			days++;
		}
		else
		{
			_date--;
			days--;
		}

	}
	return days;
}



  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值