#include<iostream> #include<iomanip> using namespace std; //运算符重载实例 //运算符重载必须有实际意义。不可以为了方便硬重载。 //比如Time的乘法就没有任何意义。学生的加法也没有确定意义。 //前置自加可以做左值,所以要加&,不过自加后做左值让自加变得无意义。 //后置自加的int主要区分前置自加重载。 //可以友元也可以作为成员函数重载。 class Time { private: int hour; int minute; int second; public: Time(); Time(int h, int m, int s); void show(); Time operator+ (int sec);//普通运算符 + Time operator-(int sec); //普通运算符 - }; Time::Time() { hour = 0; minute = 0; second = 0; } Time::Time(int h, int m, int s) { hour = h; minute = m; second = s; } //此处完成show函数的定义,注意,电子时钟的显示要保证两位,缺少则添零补齐,如03:35:08。 void Time::show() { } //-------------------------------------------------------------------------- //此处补齐加法运算符重载的定义 Time Time::operator+(int sec) { } //-------------------------------------------------------------------------- //此处补齐减法运算符重载的定义 Time Time::operator-(int sec) { } //-------------------------------------------------------------------------- int main() { //时钟,分钟,秒钟 int h, m, s; //sec为调整的秒数 int sec; //输入小时 cin >> h; //输入分钟 cin >> m; //输入秒钟 cin >> s; //初始化时钟 Time t(h, m, s); //输入增加秒数 cin >> sec; t = t + sec; //显示增加秒数后的时钟 t.show(); //输入回拨秒数 cin >> sec; t = t - sec; //显示回拨秒数后的时钟 t.show(); return 0; } 任务描述 本关任务:利用运算符+和-的重载,实现电子表的调针。 相关知识 为了完成本关任务,你需要掌握:C++的运算符重载。 C++的运算符重载 C++的运算符重载,可以让程序员编写更为简洁的程序,可以以普通运算符的方式替代繁琐的函数表达。 C++的运算符重载支持大部分已有运算符,如算术运算符,关系运算符,自增自减运算符,甚至是流运算符。 C++的运算符重载可以采用两种方式:(1)成员函数方式:也即将运算符函数重载为类的成员函数,此时要注意,该函数的参数个数为运算符目数减一。(2)友元函数方式,可以将运算符重载为友元函数方式。 编程要求 根据提示,在右侧编辑器指定位置补充代码,实现对电子表(Time 类)的调针操作,也即,加一个整数表示增加一定的秒数,减一个整数表示回拨一定秒数,并显示调整后的电子表读数。 测试说明 平台会对你编写的代码进行测试: 测试输入: 12 12 12 40 52 预期输出: 12:12:52 12:12:00 注意: 电子时钟的显示要保证两位,缺少则添零补齐,如03:35:08。而冒号为英文冒号。
时间: 2025-05-16 07:54:48 浏览: 50
以下是完整的代码实现及解释:
### 完成 `show` 函数的定义
我们希望显示的时间始终是两位数形式(不足补零),因此可以借助 `<iomanip>` 中的 `setfill('0')` 和 `setw(2)` 来控制格式化输出。
```cpp
void Time::show() {
cout << setw(2) << setfill('0') << hour // 输出小时,不足两位前面补零
<< ":" // 冒号分隔
<< setw(2) << setfill('0') << minute // 分钟同理
<< ":"
<< setw(2) << setfill('0') << second // 秒亦然
<< endl;
}
```
---
### 补齐加法运算符重载 (`operator+`) 的定义
当向时间对象添加秒数时,我们需要考虑进位规则:每满60秒进一分,每满60分进一时。如果总秒数超过一天,则清零回到第二天开始的状态。
```cpp
Time Time::operator+(int sec) { // 加上指定秒数
int totalSec = hour * 3600 + minute * 60 + second + sec; // 总秒数计算
int newHour = totalSec / 3600 % 24; // 计算新的小时
int newMinute = (totalSec % 3600) / 60; // 新分钟
int newSecond = totalSec % 60; // 新秒
return Time(newHour, newMinute, newSecond); // 返回新时间
}
```
---
### 补齐减法运算符重载 (`operator-`) 的定义
类似地,对于减少秒数的情况也需要处理负值的可能性,并保持正确的天内循环效果。
```cpp
Time Time::operator-(int sec) { // 减去指定秒数
int totalSec = hour * 3600 + minute * 60 + second - sec; // 总秒数计算
if(totalSec < 0){ // 若为负数
totalSec += 24*3600; // 循环前一天
}
int newHour = totalSec / 3600 % 24; // 新小时
int newMinute = (totalSec % 3600) / 60; // 新分钟
int newSecond = totalSec % 60; // 新秒
return Time(newHour, newMinute, newSecond); // 返回新时间
}
```
---
### 测试用例验证
#### 输入示例:
```
12
12
12
40
52
```
#### 预期输出:
```
12:12:52
12:12:00
```
**解析:**
1. 初始时间为 `12:12:12`;
2. 增加40秒后变为 `12:12:52`;
3. 回拨52秒后又变回初始状态前一秒即 `12:12:00`;
---
阅读全文
相关推荐












