定义一个Time类用来保存时间(时,分,秒),通过 重载操作符“+”实现两个时间的相加。请分别使用操作 符重载为成员函数和操作符重载为友元函数两种方式实现
时间: 2024-03-16 12:42:38 浏览: 138
好的,我可以帮你实现这个问题。首先,我们可以定义一个Time类,包含三个私有成员变量,分别表示时、分、秒:
```cpp
class Time {
private:
int hour;
int minute;
int second;
public:
Time(int h = 0, int m = 0, int s = 0);
void print();
Time operator+(const Time& t) const; // 重载为成员函数
friend Time operator+(const Time& t1, const Time& t2); // 重载为友元函数
};
```
然后,我们可以实现构造函数和输出函数:
```cpp
Time::Time(int h, int m, int s) {
hour = h;
minute = m;
second = s;
}
void Time::print() {
cout << hour << ":" << minute << ":" << second << endl;
}
```
接下来,我们可以重载操作符“+”,实现两个时间的相加。首先,我们来看成员函数的实现:
```cpp
Time Time::operator+(const Time& t) const {
Time sum;
sum.second = second + t.second;
sum.minute = minute + t.minute + sum.second / 60;
sum.hour = hour + t.hour + sum.minute / 60;
sum.second %= 60;
sum.minute %= 60;
return sum;
}
```
该函数返回一个新的Time对象,表示两个时间相加的结果。具体地,我们将两个时间的秒数相加,并将结果保存到新的Time对象中。然后,我们将分钟和小时也相应地加上,注意要处理进位的情况。最后,我们将新的秒数和分钟都取模,得到最终的结果。
然后,我们再来看友元函数的实现:
```cpp
Time operator+(const Time& t1, const Time& t2) {
Time sum;
sum.second = t1.second + t2.second;
sum.minute = t1.minute + t2.minute + sum.second / 60;
sum.hour = t1.hour + t2.hour + sum.minute / 60;
sum.second %= 60;
sum.minute %= 60;
return sum;
}
```
该函数与成员函数的实现类似,只不过它不是类的成员函数,而是一个独立的函数。因为它是友元函数,所以可以直接访问Time类的私有成员变量。
最后,我们可以在主函数中测试这两个函数的实现:
```cpp
int main() {
Time t1(1, 20, 30);
Time t2(2, 30, 50);
Time t3 = t1 + t2; // 调用成员函数
t3.print(); // 输出 4:51:20
Time t4 = t1 + t2; // 调用友元函数
t4.print(); // 输出 4:51:20
return 0;
}
```
输出结果与预期一致。至此,我们成功地实现了两个不同的方式重载操作符“+”,实现了两个时间的相加。
阅读全文