C++类与对象之日期类如何实现
发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,这篇文章主要介绍C++类与对象之日期类如何实现,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1. 实现前的铺垫在实现前,我们要先把类写好,类中包含成员函数和成员变量。对于日期类
千家信息网最后更新 2025年01月24日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安全错误
数据库的锁怎样保障安全
网络安全人人有责手抄报文字
x86服务器公司排名
远程服务器闪退
数据库左右连接的意思
ci框架读取数据库字段
互联网科技视频网站首页
珠海市明盛软件开发有限公司
有没有最好的软件开发工具
服务器硬盘接口转接卡
网络安全与信息化工作制度
广州鲸岸网络技术有限公司
软件开发三个字的名字
如何将代码布局到服务器
宿城区小型网络技术解决方案
中国医院协会网络安全分会
未来与科技互联网相关的工作
数据库的关系图
网络安全法宣传报道
甘肃优科网络技术有限公司
山西省网络安全行业中
重庆crm软件开发中心
网络安全教育视频优酷
新浪云计算免费服务器
事业单位网络安全相关制度
少年三国志服务器怀旧
网络技术应用会考知识点免费
华为企业服务器价格昆明
合工大数学学院软件开发实训
mysql创建职工数据库
服务器本地