C++类与对象之日期类如何实现
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章主要介绍C++类与对象之日期类如何实现,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1. 实现前的铺垫在实现前,我们要先把类写好,类中包含成员函数和成员变量。对于日期类
千家信息网最后更新 2025年11月07日C++类与对象之日期类如何实现
这篇文章主要介绍C++类与对象之日期类如何实现,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
1. 实现前的铺垫
在实现前,我们要先把类写好,类中包含成员函数和成员变量。对于日期类来说,拷贝构造和赋值运算符可以不写,但是我在类中写了,也没关系哦。
#includeusing std::cout;using std::endl;using std::cin;class Date{public://构造函数 Date(int year = 0, int month = 1, int day = 1) { if (year >= 0 && month > 0 && month<13 && day>0 && day <= GetMonthDay(year, month)) { _year = year; _month = month; _day = day; } else { cout << "输入日期不和法" << endl; } }//拷贝构造 Date(const Date& d) { _year = d._year; _month = d._month; _day = d._day; }//赋值运算符 Date& operator=(const Date&d) { if (this != &d) { _year = d._year; _month = d._month; _day = d._day; } return *this; } //判断合法性 int GetMonthDay(int year, int month); //输出日期 void prit(); //日期+= Date& operator+=(int day); //日期+ Date operator+(int day); //日期-= Date& operator-=(int day); //日期- Date operator-(int day); //日期== bool operator==(const Date& d); //日期> bool operator>(const Date& d); //日期!= bool operator != (const Date& d); //< bool operator < (const Date& d); //>= inline bool operator >= (const Date& d); //<= bool operator <= (const Date& d); //++d Date& operator++(); //d++ Date& operator++(int); //--d Date& operator--(); //d-- Date& operator--(int); //日期-日期 int operator-(const Date& d);private: int _year; int _month; int _day;};//给出当年当月的天数inline int Date::GetMonthDay(int year, int month){ static int dayArray[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; dayArray[2] = 28; if (month == 2 && ((year % 4 == 0) && (year % 100 != 0)) || year % 400 == 0) { dayArray[2] = 29; } return dayArray[month];}
2. 日期类的实现
在实现前我们先要利用复用,复用就是把已经写好的函数来完成要完成的函数。
2.1 日期+=天数
在这里,就复用了(日期-=天数的)函数
对于+=,当加一个天数是为正的时候(如:100),
但当加的天数为负数时(如:-100)
这里就要先判断day是否为正负数
如果为正数就正常加,如果是负数就复用-=操作符重载函数
详细请看下面:
Date& Date::operator+=(int day){ if (day > 0) { _day += day; while (_day > GetMonthDay(_year, _month)) { _day -= GetMonthDay(_year, _month); _month++; if (_month > 12) { _year++; _month = 1; } } } else { *this -= (-day); } return *this;}2.2 日期-=天数
这里也和+=操作符重载函数一样,都要判断day是否为正负值
Date& Date::operator-=(int day){ if (day > 0) { _day -= day; while (_day <= 0) { _month--; _day += GetMonthDay(_year, _month); if (_month == 0) { _year--; _month = 12; } } } else { *this += (-day); } return *this;}2.3 日期-天数
减天数,自己没变,所以要创个临时变量。
Date Date::operator-(int day){ Date ret(*this); ret -= day; return *ret;}2.4 日期+天数
与减天数同理
Date Date::operator+(int day){ Date ret(*this); ret += day; return ret;}2.5 前置++
对于前置和后置,在函数命名的时候,后置的参数列表多一个int来占位。
Date& Date::operator++(){ *this += 1; return *this;}2.6 后置++
Date& Date::operator++(int){ Date tmp(*this); tmp += 1; return *this;}2.7 前置-
Date& Date::operator--(){ *this -= 1; return *this;}2.8 后置-
Date& Date::operator--(int){ Date tmp(*this); tmp -= 1; return *this;2.9 >运算符重载
bool Date::operator>(const Date& d){ if (_year > d._year) { return true; } else if (_year == d._year) { if (_month > d._month) { return true; } else if (_month == d._month) { if (_day > d._day) { return true; } } } return false;}2.10 ==运算符重载
bool Date::operator==(const Date& d){ return _year == d._year &&_month == d._month &&_day == d._day;}2.11 >=运算符重载
这里就开始复用>和==的操作符重载函数
bool Date::operator >= (const Date& d){ return (*this > d) || (*this == d);}2.12 <运算符重载
bool Date::operator < (const Date& d){ return !(*this>d);}2.13 <=运算符重载
bool Date::operator <= (const Date& d){ return (*this < d) || (*this == d);}2.14 !=运算符重载
bool Date::operator != (const Date& d){ return !(*this == d );}2.15 日期-日期 返回天数
int Date::operator-(const Date& d){ Date max = *this; Date min = d; int flag = 1; if (max < min) { max = d; min = *this; flag = -1; } int m = 0; while (max!=min) { ++min; ++m; } return m*flag;}2.16 输出
void Date::prit(){ cout << _year << "年" << _month << "月" << _day << "日" << endl;}以上是"C++类与对象之日期类如何实现"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
日期
天数
函数
运算符
运算
复用
操作符
负数
对象
C++
内容
变量
成员
时候
篇文章
不和
没关系
价值
兴趣
参数
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发与大数据思维的认知
北京盘古网络技术有限公司
什么是网络安全的重要性
标准机柜和服务器机柜
非网络安全专业进绿盟
网络安全知识法律法规
数据库系统概论 课后答案
曙光服务器装
放网络安全的手抄报
数据库压力怎么解决
orecal数据库用什么软备份
白鸟网络技术有限公司
广州黄埔软件开发招聘信息
打卡机考勤下载没有数据库
软件开发公司出纳做什么
网络安全防疫体系建设
最好玩的外国服务器我的世界
江西戴尔服务器行情
软件开发 个人软件
在cmd查看服务器网关命令
鄞州银行软件开发工资
湖南学软件开发的公办职业大专
外贸客户服务器
我的世界服务器推荐开局送神装
批发市场管理软件开发
购买软件开发费用吗
麦克网络技术股份有限公司
关于网络安全传输协议描述
数据库的对象实例名
计算机网络技术分支