码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-04-06 00:47:09      阅读:586      评论:0      收藏:0      [点我收藏+]

标签:c++学习

#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 _


本文出自 “11413038” 博客,转载请与作者联系!

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

标签:c++学习

原文地址:http://11423038.blog.51cto.com/11413038/1760658

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!