c++学习笔记_CDate类的实现

#ifndef _CALENDAR__H _

我们提供的服务有:网站制作、成都网站设计、微信公众号开发、网站优化、网站认证、长子ssl等。为近1000家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的长子网站制作公司

#include

#include

using namespace std;

class CDate

{

friend bool leapyear(int year);

friend int getmonthday(int year, int month);

public:

void SetDate(int year, int month, int day)

{

_year = year;

_month = month;

_day = day;

}

CDate(int year = 1990, int month = 1, int day = 1)

{

if (year >= 1990 && month <= 12 && month > 0 && day > 0 && day <= getmonthday(year, month))

{

_year = year;

_month = month;

_day = day;

}

else

{

cout << "输入错误" << endl;

_year = 1990;

_month = 1;

_day = 1;

}

}

CDate(CDate &d)

{

_year = d._year;

_month = d._month;

_day = d._day;

}

void display()

{

cout << _year << "-" << _month << "-" << _day << endl;

}

private:

int getmonthday(int year, int month)

{

int montharr[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

int day = montharr[month];

if (month == 2 && leapyear(year))

{

day = day + 1;

}

return day;

}

bool leapyear(int year)

{

if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)

{

return true;

}

return false;

}

int _year;

int _month;

int _day;

public:

bool operator==(const  CDate& d)

{

return (_year == d._year &&_month == d._month&&_day == d._day);

}

bool operator!=(const  CDate& d)

{

return !(*this == d);

}

bool operator>(const  CDate& d)

{

return (_year > d._year&&_month > d._month&&_day > d._day);

}

bool operator>=(const  CDate& d)

{

return (*this > d || *this == d);

}

bool operator<(const  CDate& d)

{

return !(*this > d || *this == d);

}

bool operator<=(const  CDate& d)

{

return !(*this > d);

}

CDate& operator--()

{

*this -= 1;

return *this;

}

CDate operator--(int)

{

CDate temp(*this);

*this -= 1;

return temp;

}

CDate& operator++()

{

*this += 1;

return *this;

}

CDate operator++(int)

{

CDate temp(*this);

*this += 1;

return temp;

}

CDate operator+(int day)

{

CDate temp(*this);

if (day <0)

{

return *this - (-day);

}

temp._day += day;

while (temp._day > getmonthday(temp._year, temp._month))

{

temp._day -= getmonthday(temp._year, temp._month);

if (temp._month == 12)

{

temp._year++;

temp._month = 1;

}

else

{

temp._month++;

}

}

return temp;

}

CDate operator-(int day)

{

CDate temp(*this);

if (day < 0)

{

return *this + (-day);

}

temp._day -= day;

while (temp._day <= 0)

{

if (temp._month == 1)

{

temp._year--;

temp._month = 12;

}

else

{

temp._month--;

}

temp._day += getmonthday(_year, _month);

}

return temp;

}

CDate operator-=(int day)

{

*this = *this - day;

return *this;

}

CDate operator+=(int day)

{

*this = *this + day;

return *this;

}

int operator-(CDate &d)

{

int flag = 1;

CDate max = *this;

CDate min = d;

if (max < min)

{

std::swap(max._year, min._year);

std::swap(max._month, min._month);

std::swap(max._day, min._day);

flag = -1;

}

int count = 0;

while (max != min)

{

++count;

++min;

}

return (count*flag);

}

};

#endif _CALENDAR__H _


本文标题:c++学习笔记_CDate类的实现
当前网址:http://scyanting.com/article/pcsopd.html