编写日期时间类,年、月、日、时、分、秒都是数据成员,编写运算符“++”、“- -”、“+”、 “-”、 “>>” 、“<<”的重载函数,在主函数的函数体内中实现使用运算符直接进行日期时间对象的加、减运算。
时间: 2023-11-05 09:15:07 浏览: 66
下面是一个简单的日期时间类的实现,包括上述所述的运算符重载函数:
```c++
#include <iostream>
using namespace std;
class DateTime {
private:
int year, month, day, hour, minute, second;
public:
DateTime(int y=0, int m=0, int d=0, int h=0, int mi=0, int s=0) {
year = y;
month = m;
day = d;
hour = h;
minute = mi;
second = s;
}
// 重载前置++运算符
DateTime& operator++() {
++second;
if (second > 59) {
second = 0;
++minute;
if (minute > 59) {
minute = 0;
++hour;
if (hour > 23) {
hour = 0;
++day;
if (day > getDaysOfMonth()) {
day = 1;
++month;
if (month > 12) {
month = 1;
++year;
}
}
}
}
}
return *this;
}
// 重载前置--运算符
DateTime& operator--() {
--second;
if (second < 0) {
second = 59;
--minute;
if (minute < 0) {
minute = 59;
--hour;
if (hour < 0) {
hour = 23;
--day;
if (day < 1) {
if (--month < 1) {
month = 12;
--year;
}
day = getDaysOfMonth();
}
}
}
}
return *this;
}
// 重载+运算符
DateTime operator+(const DateTime& dt) const {
int y = year + dt.year;
int m = month + dt.month;
int d = day + dt.day;
int h = hour + dt.hour;
int mi = minute + dt.minute;
int s = second + dt.second;
if (s > 59) {
s -= 60;
++mi;
}
if (mi > 59) {
mi -= 60;
++h;
}
if (h > 23) {
h -= 24;
++d;
}
if (d > getDaysOfMonth(y, m)) {
d -= getDaysOfMonth(y, m);
++m;
}
if (m > 12) {
m -= 12;
++y;
}
return DateTime(y, m, d, h, mi, s);
}
// 重载-运算符
DateTime operator-(const DateTime& dt) const {
int y = year - dt.year;
int m = month - dt.month;
int d = day - dt.day;
int h = hour - dt.hour;
int mi = minute - dt.minute;
int s = second - dt.second;
if (s < 0) {
s += 60;
--mi;
}
if (mi < 0) {
mi += 60;
--h;
}
if (h < 0) {
h += 24;
--d;
}
if (d < 1) {
--m;
if (m < 1) {
m += 12;
--y;
}
d += getDaysOfMonth(y, m);
}
return DateTime(y, m, d, h, mi, s);
}
// 重载输入运算符
friend istream& operator>>(istream& in, DateTime& dt) {
char c;
in >> dt.year >> c >> dt.month >> c >> dt.day
>> c >> dt.hour >> c >> dt.minute >> c >> dt.second;
return in;
}
// 重载输出运算符
friend ostream& operator<<(ostream& out, const DateTime& dt) {
out << dt.year << '/' << dt.month << '/' << dt.day << ' '
<< dt.hour << ':' << dt.minute << ':' << dt.second;
return out;
}
private:
// 获取当前月份的天数
int getDaysOfMonth(int y=0, int m=0) const {
if (y == 0) y = year;
if (m == 0) m = month;
int days[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (m == 2 && ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)) {
return 29;
}
return days[m];
}
};
int main() {
DateTime dt1(2021, 1, 31, 23, 59, 59);
DateTime dt2(0, 1, 1, 0, 0, 0);
cout << "dt1 = " << dt1 << endl;
cout << "dt2 = " << dt2 << endl;
cout << "++dt1 = " << ++dt1 << endl;
cout << "--dt2 = " << --dt2 << endl;
DateTime dt3 = dt1 + dt2;
cout << "dt3 = " << dt3 << endl;
DateTime dt4 = dt1 - dt2;
cout << "dt4 = " << dt4 << endl;
cout << "请输入日期时间(yyyy/mm/dd hh:mm:ss):";
cin >> dt1;
cout << "输入的日期时间为:" << dt1 << endl;
return 0;
}
```
在上述代码中,我们重载了前置++运算符、前置--运算符、+运算符、-运算符、输入运算符和输出运算符。这些运算符的具体实现可以参考注释。在主函数中,我们创建了两个DateTime对象,分别进行了前置++、前置--、+、-、输入和输出运算符的使用。
阅读全文