【id:73】【20分】C. 时钟模拟(继承)

文章描述了一个C++程序设计问题,涉及创建一个计数器类,其子类循环计算器限制计数在一定范围内循环,以及一个时钟类,其内部使用循环计算器表示小时、分钟和秒,并能计算经过特定秒数后的时间。
摘要由CSDN通过智能技术生成

题目描述

定义计数器类,包含保护数据成员value,公有函数increment计数加1。

定义循环计算器继承计数器类,增加私有数据成员:最小值minValue,maxValue,

重写公有函数increment,使得value在minValue~maxValue区间内循环+1。

定义时钟类,数据成员是私有循环计数器对象小时hour、分钟minute、秒second,公有函数time(int s)计算当前时间经过s秒之后的时间,即hour,minute,second的新value值。

定义时钟类对象,输入当前时间和经过的秒数,调用time函数计算新时间。

根据题目要求,增加必要的构造函数、析构函数和其他所需函数。

因为clock和time是系统内置函数,为了避免重名,请不要使用clock或者time作为类名或者函数名

输入

第一行测试次数n

2行一组,第一行为当前时间(小时 分钟 秒),第二行为经过的秒数。

输出

输出n行

每行对应每组当前时间和经过秒数后计算得到的新时间(小时:分钟:秒)。

样例查看模式

正常显示查看格式

输入样例1 <-复制

输出样例1

#include<iostream>
using namespace std;
class Time
{
protected:
    int value;
public:
    Time() {};
    Time(int v)
    {
        value = v;
    }
    void increment()
    {
        value++;
    }
};
class Time1:public Time
{
protected:
    int minValue;
    int maxValue;
public:
    Time1() {};
    Time1(int v, int min, int max) :Time(v)
    {
        minValue = min;
        maxValue = max;
    }
    void increment()
    {
        value++;
        if (value == maxValue)
        {
            value = minValue;
        }
    }
    int getvalue()
    {
        return value;
    }
};
class Clock
{
    //私有循环计数器对象小时hour、分钟minute、秒second,
private:
    Time1 hour;
    Time1 minute;
    Time1 second;
public:
    //公有函数time(int s)计算当前时间经过s秒之后的时间,
    //即hour,minute,second的新value值。
    Clock() {};
    Clock(int h, int m, int s):hour(h,0,24),minute(m,0,60),second(s,0,60)
    {
    }
    void time(int s)
    {
        for (int i = 0; i < s; i++)
        {
            second.increment();
            if(second.getvalue()==0)
            {
                minute.increment();
                if(minute.getvalue() == 0)
                {
                    hour.increment();
                }
            }
        }
    }
    void print()
    {
        cout << hour.getvalue() << ":" << minute.getvalue() << ":" << second.getvalue() << endl;
    }
};
int main()
{
    int n;
    cin >> n;
    while (n--)
    {
        int h, m, s;
        cin >> h >> m >> s;
        int s1;
        cin >> s1;
        Clock c(h, m, s);
        c.time(s1);
        c.print();
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值