定义一个Time类用来保存时间(时,分,秒),通过 重载操作符“+”实现两个时间的相加。请分别使用操作 符重载为成员函数和操作符重载为友元函数两种方式实现,并可以手动输入两个时间测试
时间: 2024-03-16 16:42:11 浏览: 67
类应用举例 操作符重载
好的,以下是定义Time类并重载"+"操作符的代码:
```cpp
#include <iostream>
using namespace std;
class Time {
public:
Time(int h = 0, int m = 0, int s = 0) : hour(h), minute(m), second(s) {}
void set_time(int h, int m, int s) {
hour = h;
minute = m;
second = s;
}
void show_time() const {
cout << hour << ":" << minute << ":" << second << endl;
}
Time operator+(const Time& t) const {
int h = hour + t.hour;
int m = minute + t.minute;
int s = second + t.second;
if (s >= 60) {
s -= 60;
m += 1;
}
if (m >= 60) {
m -= 60;
h += 1;
}
if (h >= 24) {
h -= 24;
}
return Time(h, m, s);
}
private:
int hour;
int minute;
int second;
};
Time operator+(const Time& t1, const Time& t2) {
int h = t1.hour + t2.hour;
int m = t1.minute + t2.minute;
int s = t1.second + t2.second;
if (s >= 60) {
s -= 60;
m += 1;
}
if (m >= 60) {
m -= 60;
h += 1;
}
if (h >= 24) {
h -= 24;
}
return Time(h, m, s);
}
int main() {
Time t1, t2, t3;
int h, m, s;
cout << "Enter the first time (hh:mm:ss): ";
scanf("%d:%d:%d", &h, &m, &s);
t1.set_time(h, m, s);
cout << "Enter the second time (hh:mm:ss): ";
scanf("%d:%d:%d", &h, &m, &s);
t2.set_time(h, m, s);
t3 = t1 + t2;
cout << "The first time is: ";
t1.show_time();
cout << "The second time is: ";
t2.show_time();
cout << "The sum of the two times is: ";
t3.show_time();
return 0;
}
```
上面的代码中,我们定义了一个Time类,其中包含了时(hour)、分(minute)、秒(second)这三个私有成员变量,以及一个构造函数、一个设置时间的函数(set_time)、一个显示时间的函数(show_time)和一个重载"+"操作符的成员函数(operator+)。其中,重载"+"操作符的成员函数返回一个新的Time对象,表示两个时间相加之后的结果。
此外,我们还定义了一个全局函数,也重载了"+"操作符,其实现与重载为成员函数的方法相同,只是它是一个友元函数,可以直接访问Time类的私有成员变量。
在main函数中,我们分别输入了两个时间,并调用了重载的"+"操作符进行相加,最后输出了相加的结果。
运行程序,输入如下:
```
Enter the first time (hh:mm:ss): 12:30:45
Enter the second time (hh:mm:ss): 01:15:20
```
程序输出如下:
```
The first time is: 12:30:45
The second time is: 1:15:20
The sum of the two times is: 13:46:5
```
可以看到,程序正确地计算了两个时间的和,并输出了结果。
阅读全文