您的位置:首页 > 其它

类和对象—日期类

2016-01-21 14:49 387 查看
C++是基于面向过程与面向对象的语言,类和对象是其中比较重要的部分,也是较为难理解的部分,这一部分需要大量的代码练习。下面为类和对象—日期类。主要功能相当于一个日期计算器,可以实现日期的推后、提前、日期差等功能。

#define _CRT_SECURE_NO_WARNINGS 1
//日期类

#include <iostream>
#include <stdlib.h>
using namespace std;

class Date
{
public:
Date(int year, int month, int day)   //构造函数
{
_year = year;
_month = month;
_day = day;
}

Date(const Date & d)   //拷贝构造函数
{
_year = d._year;
_month = d._month;
_day = d._day;
}

void Display()   //打印
{
cout << _year << "-" << _month << "-" << _day << endl;
}

~Date()   //析构函数
{ }

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

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 *this < d || *this == d;
}

int _GetMonthDay(int year, int month)    //判断每月的天数
{
int day;
if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0))
{
if (month == 2)
{
day = 29;
}
else if (month == 1 || month == 3 || month == 5 || month == 7 ||
month == 8 || month == 10 || month == 12)
{
day = 31;
}
else
{
day = 30;
}
}
else
{
if (month == 2)
{
day = 28;
}
if (month == 1 || month == 3 || month == 5 || month == 7 ||
month == 8 || month == 10 || month == 12)
{
day = 31;
}
else
{
day = 30;
}
}
return day;
}

Date operator+(int day)    //推后day
{
if (day < 0)
{
return *this - (-day);
}
Date tmp(*this);
tmp._day = tmp._day + day;
while (tmp._day > _GetMonthDay(tmp._year, tmp._month))
{
tmp._day -= _GetMonthDay(tmp._year, tmp._month);
if (tmp._month == 12)
{
tmp._year++;
tmp._month = 1;
}
else
{
tmp._month++;
}
}
return tmp;
}

Date & operator+=(int day)     //推后多少天
{
*this = *this + day;
return *this;
}

Date & operator++()   //加1天,返回增加后的日期
{
*this += 1;
return *this;
}

Date operator++(int)   //加一天,返回增加前的日期
{
Date tmp(*this);
*this += 1;
return tmp;
}

Date operator-(int day)   //提前day天
{
if (day < 0)
{
return *this + (-day);
}
Date tmp(*this);
tmp._day -= day;
while (tmp._day <= 0)
{
if (tmp._month == 1)
{
tmp._month = 12;
tmp._year--;
}
else
{
tmp._month--;
}
tmp._day -= _GetMonthDay(tmp._year, tmp._month);
}
return tmp;
}

Date & operator-=(int day)   //减等于
{
*this = *this - day;
return *this;
}

Date & operator--()     //减减、后置
{
*this -= 1;
return *this;
}

Date operator--(int)    //减减、前置
{
Date tmp(*this);
*this -= 1;
return tmp;
}

bool operator!=(const Date & d)   //不等于
{
return (_year != d._year)|| (_year == d._year && _month != d._month)
|| (_year == d._year && _month == d._month && _day != d._day);
}

int operator-(const Date & d)   //两个日期的差
{
int flag = 1;
Date max = *this;
Date min = d;
if (max < min)
{
swap(max._year, min._year);
swap(max._month, min._month);
swap(max._day, min._day);
flag = -1;
}
int day = 0;
while (max != min)
{
++min;
++day;
}
return day*flag;
}

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

//测试用例
void Test1()
{
Date d1(2015, 1, 1);
d1 += 35;
d1.Display();

d1 += 10;
d1.Display();
}

void Test2()
{
Date d2(2016, 1, 15);
d2 -= 30;
d2.Display();

d2 -= 10;
d2.Display();
}

void Test3()
{
Date d3(2016, 2, 9);
d3--;
d3.Display();

d3++;
d3.Display();
}

//主函数
int main()
{
//Test1();
Test2();
//Test3();
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息