编写日期时间类,年、月、日、时、分、秒都是数据成员,编写运算符“++”、“- -”、“+”、 “-”、 “>>” 、“<<”的重载函数,在主函数的函数体内中实现使用运算符直接进行日期时间对象的加、减运算。
时间: 2023-11-05 11:06:54 浏览: 133
运算符重载,实现时间的加减
4星 · 用户满意度95%
以下是一个简单的日期时间类的实现,包括了所需的运算符重载函数:
```c++
#include <iostream>
using namespace std;
class DateTime {
private:
int year;
int month;
int day;
int hour;
int minute;
int second;
public:
DateTime(int y = 0, int m = 0, int d = 0, int h = 0, int min = 0, int sec = 0) {
year = y;
month = m;
day = d;
hour = h;
minute = min;
second = sec;
}
friend DateTime operator++(DateTime& dt) {
dt.second++;
if (dt.second >= 60) {
dt.second = 0;
dt.minute++;
}
if (dt.minute >= 60) {
dt.minute = 0;
dt.hour++;
}
if (dt.hour >= 24) {
dt.hour = 0;
dt.day++;
}
return dt;
}
friend DateTime operator--(DateTime& dt) {
dt.second--;
if (dt.second < 0) {
dt.second = 59;
dt.minute--;
}
if (dt.minute < 0) {
dt.minute = 59;
dt.hour--;
}
if (dt.hour < 0) {
dt.hour = 23;
dt.day--;
}
return dt;
}
friend DateTime operator+(const DateTime& dt1, const DateTime& dt2) {
DateTime dt;
int carry = 0;
dt.second = dt1.second + dt2.second;
if (dt.second >= 60) {
dt.second -= 60;
carry = 1;
}
dt.minute = dt1.minute + dt2.minute + carry;
if (dt.minute >= 60) {
dt.minute -= 60;
carry = 1;
}
else {
carry = 0;
}
dt.hour = dt1.hour + dt2.hour + carry;
if (dt.hour >= 24) {
dt.hour -= 24;
carry = 1;
}
else {
carry = 0;
}
int daysInMonth[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
if (dt1.year % 4 == 0 && dt1.year % 100 != 0 || dt1.year % 400 == 0) {
daysInMonth[2] = 29;
}
dt.day = dt1.day + dt2.day + carry;
while (dt.day > daysInMonth[dt1.month]) {
dt.day -= daysInMonth[dt1.month];
dt.month++;
if (dt.month > 12) {
dt.month = 1;
dt.year++;
if (dt.year % 4 == 0 && dt.year % 100 != 0 || dt.year % 400 == 0) {
daysInMonth[2] = 29;
}
else {
daysInMonth[2] = 28;
}
}
}
dt.year = dt1.year;
dt.month = dt1.month;
return dt;
}
friend DateTime operator-(const DateTime& dt1, const DateTime& dt2) {
DateTime dt;
int borrow = 0;
dt.second = dt1.second - dt2.second;
if (dt.second < 0) {
dt.second += 60;
borrow = 1;
}
dt.minute = dt1.minute - dt2.minute - borrow;
if (dt.minute < 0) {
dt.minute += 60;
borrow = 1;
}
else {
borrow = 0;
}
dt.hour = dt1.hour - dt2.hour - borrow;
if (dt.hour < 0) {
dt.hour += 24;
borrow = 1;
}
else {
borrow = 0;
}
int daysInMonth[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
if (dt1.year % 4 == 0 && dt1.year % 100 != 0 || dt1.year % 400 == 0) {
daysInMonth[2] = 29;
}
dt.day = dt1.day - dt2.day - borrow;
while (dt.day < 1) {
dt.month--;
if (dt.month < 1) {
dt.month = 12;
dt.year--;
if (dt.year % 4 == 0 && dt.year % 100 != 0 || dt.year % 400 == 0) {
daysInMonth[2] = 29;
}
else {
daysInMonth[2] = 28;
}
}
dt.day += daysInMonth[dt.month];
}
dt.year = dt1.year;
dt.month = dt1.month;
return dt;
}
friend istream& operator>>(istream& in, DateTime& dt) {
cout << "Enter year: ";
in >> dt.year;
cout << "Enter month: ";
in >> dt.month;
cout << "Enter day: ";
in >> dt.day;
cout << "Enter hour: ";
in >> dt.hour;
cout << "Enter minute: ";
in >> dt.minute;
cout << "Enter second: ";
in >> 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;
}
};
int main() {
DateTime dt1(2022, 12, 31, 23, 59, 59);
DateTime dt2(0, 0, 1, 0, 0, 1);
cout << "dt1: " << dt1 << endl;
cout << "dt2: " << dt2 << endl;
DateTime dt3 = dt1 + dt2;
cout << "dt3 = dt1 + dt2: " << dt3 << endl;
DateTime dt4 = dt1 - dt2;
cout << "dt4 = dt1 - dt2: " << dt4 << endl;
cout << "++dt1: " << ++dt1 << endl;
cout << "--dt1: " << --dt1 << endl;
cout << "Enter a DateTime object:" << endl;
cin >> dt1;
cout << "dt1: " << dt1 << endl;
return 0;
}
```
在上面的代码中,日期时间类的数据成员包括年、月、日、时、分、秒。重载的运算符包括“++”、“- -”、“+”、“-”、“>>”、“<<”。其中,“++”和“- -”运算符重载函数用于对时间进行一秒钟的加减操作;“+”和“-”运算符重载函数用于计算两个日期时间对象之间的时间差;“>>”和“<<”运算符重载函数用于输入和输出日期时间对象。
在主函数中,我们可以通过直接使用运算符进行日期时间对象的加减运算,例如:
```c++
DateTime dt1(2022, 12, 31, 23, 59, 59);
DateTime dt2(0, 0, 1, 0, 0, 1);
DateTime dt3 = dt1 + dt2;
DateTime dt4 = dt1 - dt2;
```
这里,我们通过将两个日期时间对象相加或相减,得到了一个新的日期时间对象dt3和dt4。我们也可以使用“++”、“- -”运算符对日期时间对象进行操作,例如:
```c++
cout << "++dt1: " << ++dt1 << endl;
cout << "--dt1: " << --dt1 << endl;
```
这里,我们对日期时间对象dt1进行了一秒钟的加减操作,并输出了结果。
最后,我们还可以使用“>>”、“<<”运算符重载函数,从标准输入中读取一个日期时间对象,或将一个日期时间对象输出到标准输出:
```c++
cout << "Enter a DateTime object:" << endl;
cin >> dt1;
cout << "dt1: " << dt1 << endl;
```
阅读全文