时钟调整(运算符前后增量)

题目描述

假定一个时钟包含时、分、秒三个属性,取值范围分别为0~11,0~59,0~59,具体要求如下:

1、用一元运算符++,并且是前增量的方法,实现时钟的调快操作。例如要把时钟调快5秒,则执行5次”  ++<对象> “ 的操作

2、用一元运算符--,并且是后增量的方法,实现时钟的调慢操作。例如要把时钟调慢10秒,则执行10次” <对象>-- “的操作

3、用构造函数的方法实现时钟对象的初始化,用输出函数实现时钟信息的输出

clock是系统内部函数,所以不要用来做类名或者其他

输入

第一行输入时钟的当前时间时、分、秒

第二行输入t表示有t个示例

第三行输入t个整数x,如果x为正整数,则表示执行调快操作,使用重载运算符++;如果x为负整数,则表示执行调慢操作,使用重载运算符--

每次的调快或调慢操作都是承接上一次调整后的结果进行,例如先调快10秒,再调慢2秒,那么调慢2秒是接着调快10秒后的结果进行的

输出

每行输出每个时钟调整操作后的时分秒

-------------------------------------------------------

输入样例:

11 58 46
4
5 70 -22 -55
输出样例:

11:58:51
0:0:1
11:59:39
11:58:44

AC代码

#include <iostream>
using namespace std;

// 增量计数器类
class IncrementCounter
{
public:
    IncrementCounter(int x, int y, int z) : shi(x), fen(y), miao(z) {} // 构造函数
    IncrementCounter &operator++();                                    // 前增量,++*this
    IncrementCounter operator++(int);
    IncrementCounter &operator--();
    IncrementCounter operator--(int);

    void display()
    {
        cout << shi << ":" << fen << ":" << miao << endl;
    } // 输出

private:
    int shi, fen, miao;
};

// 前加加,++*this
IncrementCounter &IncrementCounter::operator++()
{
    miao++;
    if (miao > 59)
    {
        fen++;
        miao = 0;
    }
    if (fen > 59)
    {
        shi++;
        fen = 0;
    }
    if (shi > 11)
    {
        shi = 0;
    }
    return *this; // 再返回原对象
}

// 后加加,*this++
IncrementCounter IncrementCounter::operator++(int)
{
    IncrementCounter temp = *this;
    miao++;
    if (miao > 59)
    {
        fen++;
        miao = 0;
    }
    if (fen > 59)
    {
        shi++;
        fen = 0;
    }
    if (shi > 11)
    {
        shi = 0;
    }
    return temp;
}

// 前减减,--*this
IncrementCounter &IncrementCounter::operator--()
{
    miao--;
    if (miao < 0)
    {
        fen--;
        miao = 59;
    }
    if (fen < 0)
    {
        shi--;
        fen = 59;
    }
    if (shi < 0)
    {
        shi = 11;
        fen = 59;
        miao = 59;
    }
    return *this; // 再返回原对象
}

// 后减减,*this--
IncrementCounter IncrementCounter::operator--(int)
{
    IncrementCounter temp = *this;
    miao--;
    if (miao < 0)
    {
        fen--;
        miao = 59;
    }
    if (fen < 0)
    {
        shi--;
        fen = 59;
    }
    if (shi < 0)
    {
        shi = 11;
        fen = 59;
        miao = 59;
    }
    return temp;
}

// 主函数
int main()
{
    int a, b, c;
    cin >> a >> b >> c;
    IncrementCounter p(a, b, c);
    int t;
    int flag = 0;
    cin >> t;
    while (t--)
    {
        int t1;
        cin >> t1;
        if (t1 < 0)
        {
            flag = 1;
            t1 = -t1;
        }
        while (t1--)
        {
            if (flag == 1)
            {
                p--;
            }
            else
            {
                ++p;
            }
        }
        p.display();
    }
    return 0;
}

  • 16
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

szuzhan.gy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值