温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2020-06-19 17:25:13 来源:网络 阅读:562 作者:smile_晶 栏目:编程语言

#ifndef _CALENDAR__H _

#include<assert.h>

#include <iostream>

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 _


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI