【C++】模拟实现一个日期类,实现基本重载运算符等
来源:互联网 发布:我知谁掌管明天 原唱 编辑:程序博客网 时间:2024/06/06 00:57
没事可以自己在C++上模拟实现一个日期类。
Date.h文件
#ifndef __DATE_H__#define __DATE_H__#include <iostream>using namespace std;class Date{friend ostream& operator<<(ostream& _cout, const Date& date);friend istream& operator>>(istream& _cin, Date& date);public:Date(int year,int month,int day):_year(year),_month(month),_day(day){}Date(const Date& d):_year(d._year),_month(d._month),_day(d._day){}//日期的赋值Date& operator=(const Date& d);//指定年份是否为闰年static bool IsLeapYear(const Date& date);//当前年份是否为闰年bool IsLeapYear();//计算当前月份所在天数int DayOfMonth();//计算指定月份天数 static int DayOfMonth(const Date& date); //计算当前日期day天之后日期Date operator+(int day);//计算当前日期day天之前日期Date& operator-(int day);//判断两个日期类是否相等bool operator==(const Date& date);//判断两个日期的大小D1>D2bool operator>(const Date& date);//判断两个日期的大小D1<D2bool operator<(const Date& date);//两个日期类D1 != D2bool operator!=(const Date&date);//计算两个日期之间差距int operator-(const Date& date);//显示void Display();//前置++Date& operator++();//后置++Date operator++(int);//前置--Date& operator--();//后置--Date operator--(int);private:int _year;int _month;int _day;};#endif //__DATE_H__
Date.cpp文件
#include<iostream>#include<Windows.h>#include"Date.h"using namespace std;//日期的赋值Date& Date::operator=(const Date& d){if(this != &d){_year = d._year;_month = d._month;_day = d._day;}return *this;}//指定年份是否为闰年bool Date::IsLeapYear(const Date& date){int year = date._year;return (year % 4 ==0 || year % 400 ==0) && (year % 100 !=0);}//当前年份是否为闰年bool Date::IsLeapYear(){int year = this->_year;return (year % 4 ==0 || year % 400 ==0) && (year % 100 !=0);}//计算当前月份所在天数int Date::DayOfMonth(){int d = 0;switch(this->_month){case 1:case 3:case 5:case 7:case 8:case 10:case 12:d = 31;break;case 4:case 6:case 9:case 11:d = 30;break;case 2:d = 28 + IsLeapYear();break;}return d;}//计算指定月份天数 int Date::DayOfMonth(const Date& date){int d = 0;switch(date._month){case 1:case 3:case 5:case 7:case 8:case 10:case 12:d = 31;break;case 4:case 6:case 9:case 11:d = 30;break;case 2:d = 28 + IsLeapYear(date);break;}return d;}//计算当前日期day天之后日期Date Date::operator+(int day){Date temp(*this);if(day == 0)return temp;if(day > 0){temp._day += day;while(temp._day > DayOfMonth()){temp._day -= DayOfMonth();temp._month++;if(temp._month > 12){temp._month -= 12;temp._year++;}}return temp;}elsereturn temp -(-day);}//计算当前日期day天之前日期Date& Date::operator-(int day){Date& temp = (*this);if(day == 0)return temp;if(day > 0){temp._day -= day;while(temp._day <= 0){--temp._month;if(temp._month == 0){temp._month = 12;--temp._year;}temp._day += DayOfMonth();}return temp;}elsereturn temp +(-day);}//判断两个日期类是否相等bool Date::operator==(const Date& date){return ((_year == date._year)&&(_month == date._month)&&(_day == date._day));}//判断两个日期的大小D1>D2bool Date::operator>(const Date& date){return ((_year > date._year)||((_year == date._year)&&(_month > date._month))||((_year == date._year)&&(_month == date._month)&&(_day > date._day)));}//判断两个日期的大小D1<D2bool Date::operator<(const Date& date){return!((*this > date)||(*this == date));}//两个日期类D1 != D2bool Date::operator!=(const Date&date){return !((*this) == date);}//计算两个日期之间差距int Date::operator-(const Date& date){Date datemax(*this);Date datemin(date);if((*this) < date){Date temp(datemax);datemax = datemin;datemin = temp;}int day = 0;while(1){day++; if(datemin + day == datemax)break;}return day;}void Date::Display() { cout<<this->_year<<"-"<<this->_month<<"-"<<this->_day<<endl; }//前置++Date& Date::operator++(){this->_day += 1;if((this->_day)>DayOfMonth()){this->_day = 1;this->_month++;if((this->_month)>12){this->_year++;this->_month = 1;}}return *this;}//后置++Date Date::operator++(int){Date temp(*this);(*this) = ++(*this);return temp;}//前置--Date& Date::operator--(){this->_day -= 1;if((this->_day)< 1){Date temp((*this)-1);this->_day = DayOfMonth(temp);this->_month--;if((this->_month)< 1){this->_year--;this->_month = 12;}}return *this;}//后置--Date Date::operator--(int){Date temp(*this);(*this) = --(*this);return temp;}ostream& operator<<(ostream& _cout, const Date& date){ _cout << date._year << "/" << date._month << "/" << date._day; return _cout;}istream& operator>>(istream& _cin, Date& date){ _cin >> date._year >> date._month >> date._day; return _cin;}
Test.cpp测试文件
#include<stdio.h>#include<Windows.h>#include<iostream>#include"Date.h"using namespace std;void test(){Date D1(2017,10,30);D1.Display();//测试日期的赋值/*Date D2(2017,10,20);D2.Display();(D1 = D2).Display();*///测试当前日期Day天之后日期/*(D1+4).Display();*///测试当前日期Day天之前日期/*(D1-4).Display();*///判断两个日期是否相等/*Date D2(2017,10,20);int i = 5;i = (D1 == D2);cout<<i<<endl;*///判断两个日期是否不等/*Date D2(2017,10,20);int i = 5;i = (D1 != D2);cout<<i<<endl;*///判断两个日期的大小/*Date D2(2017,10,20);int i = 5;i = (D1 > D2);cout<<i<<endl;*///计算两个日期之间相差的天数/*Date D2(2017,10,20);D2.Display();int days = 0;days = D1 - D2;cout<<"两个日期之间相差"<<days<<"天"<<endl;*///前置加加 后置加加/*Date D1(2016,12,31);D1.Display();(++D1).Display();(D1++).Display();*///前置减减 后置减减 后置减减/*Date D1(2017,1,1);(--D1).Display();(D1--).Display();(D1--).Display();*/}int main(){test();system("pause");return 0;}
程序运行结果:测试日期的赋值:
测试当前日期4天之后日期:
测试当前日期4天之前日期:
判断两个日期是否相等:
判断两个日期是否不等:
判断两个日期的大小(D1>D2):
计算两个日期之间相差的天数:
前置++ 后置++:
前置-- 后置-- 后置--:
阅读全文
0 0
- 【C++】模拟实现一个日期类,实现基本重载运算符等
- 【C++】模拟实现一个复数类,要求实现 加,减,乘,除等基本运算符的重载
- 用C/C++实现一个日期类,重载运算符=,==,+,-,++,--,>,>=,<,<=等
- C++ 声明并实现一个日期类(运算符重载)
- 【c++】实现"String"类,完成运算符重载等
- c++日期类的实现级运算符的重载
- 【7.11】为Date类重载“+”运算符,实现在某一个日期上(月、日、年)加一个天数。
- 【c++】实现运算符的重载
- c++::实现一个日期类
- C/C++ 重载+运算符重载加号 实现矩阵相加
- <C/C++基础>设计一个String类(重载运算符等)
- 定义日期类Date,并重载运算符实现几种操作
- 运算符重载----日期类
- 运算符重载--日期类
- 十九、运算符重载(三)String类的改进实现、[]运算符重载、+运算符重载、+=运算符重载、<<运算符重载、>>运算符重载
- 模拟实现C++ string类(构造、析构、拷贝、赋值运算符重载)
- 模拟实现日期类
- 重载一个+运算符、<<运算符和>运算符。实现对分数的运算
- AngularJS select组件如何默认选中状态
- c++实现大数的加减乘运算(数组存放)
- window下完整安装QT
- 简单设计模式01
- Spring-自动装配
- 【C++】模拟实现一个日期类,实现基本重载运算符等
- TR101-290码流三级错误监测
- JS打开摄像头并截图上传
- 【云隐科技】Zigbee抓包工具ubiqua秘钥设置问题
- 策略模式02
- CollectionUtils各种方法,总有一个满足你
- JVM-类加载机制
- pytreebank︱情感分析可视化——情感结构树
- 图像识别与处理之Opencv——常用的OpenCV2函数速查