Problem F: 时间类的加、减法赋值运算

Description

封装一个时间类Time,在类上重载以下运算符,使得main()函数能够正确运行。

1. Time::Time()无参构造方法。

2. Time::inputTime()方法:按格式从标准输入读取数据修改Time对象的时分秒数值。该方法返回修改后的对象。

3. Time::showTime()方法:输出“hh:mm:ss”,不足两位的要前面补0。如果对象不是合法的时间,则输出“Time error”。

4. 运算符

加法赋值运算符“+=”和减法赋值运算符“-=”:把一个整数m加到Time对象自身,并且仅对合法的时间操作,不会产生不合法的时间,比如:

若原时间对象为“00:00:00”,减去2后的对象为“23:59:58”;

若原时间对象为“23:59:59”,加上1后的对象为“00:00:00”;

若原时间对象为“24:60:60”,加减后的对象仍为“24:60:60”

函数调用格式见append.cc。

append.cc中已给出main()函数

Input

输入的第一个整数n,表示有n组测试数据,每组4个整数,前三个整数为:hh,mm,ss,分别表示时、分、秒,其值都在int范围内,最后一个整数为m。

Output

每个输入对应两行输出,分别为时间“hh,mm,ss”加上m秒和减去m秒后的值。错误的时间输出“Time error”

Sample Input

6

0 0 1 2

0 59 59 1

1 1 60 10

23 0 0 60

23 59 59 100

24 1 0 3

Sample Output

00:00:03

23:59:59

01:00:00

00:59:58

Time error

Time error

23:01:00

22:59:00

00:01:39

23:58:19

Time error

Time error

HINT

输出格式用头文件<iomanip>中流操作算子:

setw(w)   :设置数据的输出宽度为w个字符

setfill(c):设置用字符c作为填充字符

left      :设置输出左对齐

right     :设置输出优对齐

Append Code

#include<iostream>

#include<iomanip>

using namespace std;

class Time

{

private:

    int h,m,s;

public:

    Time():h(0),m(0),s(0){}

    Time &inputTime(){cin>>h>>m>>s;return *this;}

    void showTime()const{

        if(h>=0&&h<24&&m>=0&&m<60&&s>=0&&s<60)

        cout<<setw(2)<<setfill(‘0‘)<<h<<":"<<setw(2)<<setfill(‘0‘)<<m<<":"<<setw(2)<<setfill(‘0‘)<<s<<endl;

        else

            cout<<"Time error"<<endl;

        }

    Time &operator+=(int a)

    {

        if(h>=0&&h<24&&m>=0&&m<60&&s>=0&&s<60)

        {

            s+=a;

             while(s>=60)

        {

            s-=60;

            m++;

        }

        //cout<<s<<"皮皮虾1\n";

            while(m>=60)

            {

                m-=60;

            h++;

            }

            //cout<<m<<"皮皮虾2\n";

            while(h>=24)

                h-=24;

            //cout<<h<<"皮皮虾3\n";

        }

       return *this;

    }

    Time &operator-=(int a)

    {

        if(h>=0&&h<24&&m>=0&&m<60&&s>=0&&s<60)

        {

            s-=a;

             while(s<0)

        {

            s+=60;

            m--;

        }

            while(m<0)

        {

            m+=60;

            h--;

        }

            while(h<0)

            h+=24;

        }

       return *this;

    }

};

int main()

{

    int cases;

    cin>>cases;

    for(int i = 1; i <= cases; ++i)

    {

        Time t;

        t.inputTime();

        Time tt(t);

        int num;

        cin>>num;

        t += num;

        t.showTime();

        tt -= num;

        tt.showTime();

    }

}

时间: 2024-10-12 19:04:23

Problem F: 时间类的加、减法赋值运算的相关文章

Problem F: 时间类的构造和输出

Description 封装一个时间类Time,用于时间处理的相关功能,支持以下操作: 1. Time::Time(int,int,int)构造方法:传递时分秒的三个参数构造对象. 2. Time::showTime()方法:输出"hh:mm:ss",不足两位的要前面补0. 你设计一个时间类Time,使得main()函数能够正确运行. 函数调用格式见append.cc. append.cc中已给出main()函数. Input 输入的第一个整数n,表示有n组测试数据,每组3个整数:hh

Problem E: 时间类的静态成员计数

Description 封装一个时间类Time,用于时间处理的相关功能,支持以下操作: 1. Time::Time()无参构造方法. 2. Time::Time(int,int,int)构造方法:传递时分秒的三个参数构造对象. 3. Time::Time(const T&)拷贝构造方法. 4. 对象整体读写方法: Time::setTime(int,int,int)方法:传递时分秒三个参数修改Time对象的时分秒数.该方法返回修改后的对象. Time::setTime(const T&)方

Problem A: 时间类的拷贝和整体读写

Description 封装一个时间类Time,用于时间处理的相关功能,支持以下操作: 1. Time::Time()无参构造方法. 2. Time::Time(int,int,int)构造方法:传递时分秒的三个参数构造对象. 3. Time::Time(const T&)拷贝构造方法.拷贝构造函数调用时输出"There was a call to the copy constructor : h,m,s","h,m,s"为所构造对象的时分秒数值,无需补0.

Problem D: 时间类的12小时制输出

Description 封装一个时间类Time,用于时间处理的相关功能,支持24小时制和12小时制,支持以下操作: 1. Time::Time()无参构造方法. 2. Time::Time(int,int,int)构造方法:传递时分秒的三个参数构造对象. 3. Time::Time(const T&)拷贝构造方法. 4. 成员读函数: Time::hour()  :返回Time的小时数: Time::minute():返回Time的分钟数: Time::second():返回Time的秒数. 5

Problem B: 时间类的错误数据处理

Description 封装一个时间类Time,用于时间处理的相关功能,支持以下操作: 1. Time::Time()无参构造方法. 2. Time::Time(int,int,int)构造方法:传递时分秒的三个参数构造对象. 3. Time::Time(const T&)拷贝构造方法. 4. 成员读函数: Time::hour()  :返回Time的小时数: Time::minute():返回Time的分钟数: Time::second():返回Time的秒数. 5. 成员写函数: Time:

Problem C: 时间类的常量

Description 封装一个时间类Time,用于时间处理的相关功能,支持以下操作: 1. Time::Time()无参构造方法. 2. Time::Time(int,int,int)构造方法:传递时分秒的三个参数构造对象. 3. Time::Time(const T&)拷贝构造方法. 4. 成员读函数: Time::hour()  :返回Time的小时数: Time::minute():返回Time的分钟数: Time::second():返回Time的秒数. 5. 成员写函数: Time:

Problem F: 分数类的类型转换

Description 封装一个分数类Fract,用来处理分数功能和运算,支持以下操作: 1. 构造:传入两个参数n和m,表示n/m:分数在构造时立即转化成最简分数. 2. show()函数:分数输出为"a/b"或"-a/b"的形式,a.b都是无符号整数.若a为0或b为1,只输出符号和分子,不输出"/"和分母. 3. double类型转换函数:用分子除以分母,得到的小数.注意:分子为0时不要输出为"-0" ----------

Problem B: 时间和日期类(III)

Problem B: 时间和日期类(III) Time Limit: 4 Sec  Memory Limit: 128 MBSubmit: 2889  Solved: 1732[Submit][Status][Web Board] Description 设计一个日期时间类,用于读取输入的数据,按格式输出日期和时间. 设计日期时间类DateTime由2个成员组成,分别是一个Date类对象和一个Time类对象: 设计DateTime类需支持以下操作: DateTime::DateTime()无参构

第十七周oj刷题——Problem O: B C++时间类的运算符重载

Description C++时间类的运算符重载 定义一个时间类Time,其数据成员为表示时间的小时(hour).分(minute),秒(second). 重载运算符"+",使之能用于时间对象的加法运算:重载运算符"<<",使之能用于时间对象的输出操作. (1)参加运算的两个操作数可以都是时间类对象,也可以其中有一个是整数(表示秒),顺序任意. 例如,t1+t2,i+t1,t1+i均合法(设i为整数表示秒数, t1,t2为时间类Time对象). (2)输