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::hour(int)  :传参修改Time的小时数;

Time::minute(int):传参修改Time的分钟数;

Time::second(int):传参修改Time的秒数。

6. 对象整体读写方法:

Time::setTime(int,int,int)方法:传递时分秒三个参数修改Time对象的时分秒数。该方法返回修改后的对象。

Time::setTime(const T&)方法:传递一个参数修改Time对象的时分秒数。该方法返回修改后的对象。

Time::getTime()方法:返回对象自身的引用。其实,t.getTime()即t。

仅在Time类中的Time::getTime()方法实在是多余,在组合或者继承关系时才会有机会用到。

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

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

注意:为了保证Time类的常量对象能够正确的调用Time类的方法,那些不修改对象数据成员的函数都应该是常量成员函数,在返回对象自身的引用时也应返回常量引用。

你设计一个时间类Time,使得main()函数能够正确运行。

函数调用格式见append.cc。

append.cc中已给出main()函数。main()函数内容稍微繁复,仅为测试对象的各种调用情况。

Input

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

Output

开始部分为由main()函数产生的固定输出,用于测试对象的某些方法的调用情况。输出“Test data output :”之后为测试数据对应的输出:

每组测试数据对应一组输出“hh:mm:ss”,不足两位的输出需要前面补0。如果输入的时间不合法,则输出“Time error”。格式见sample。

Sample Input

6

0 0 1

0 59 59

1 1 60

23 0 0

23 59 59

24 1 0

Sample Output

Constant test output :

00:00:00

01:02:03

Time error

Test data output :

00:00:01

00:59:59

Time error

23:00:00

23:59:59

Time error

HINT

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

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

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

Append Code

#include<iostream>

#include<iomanip>

using namespace std;

class Time

{

private:

    int x,y,z;

public:

    Time():x(0),y(0),z(0){}

    Time(int a,int b,int c):x(a),y(b),z(c){}

    Time(const Time &q):x(q.x),y(q.y),z(q.z){}//cout<<"There was a call to the copy constructor : "<<x<<","<<y<<","<<z<<endl;}

    int hour ()const{return x;}

    int minute()const{return y;}

    int second()const{return z;}

    void hour(int a){x=a;}

    void minute(int a){y=a;}

    void second(int a){z=a;}

    Time &setTime(int a,int b,int c){x=a;y=b;z=c;return *this;}

    Time &setTime(const Time &q){x=q.x;y=q.y;z=q.z;return *this;}

    const Time &getTime()const{return *this;}

     Time &inputTime()

     {

         int a,b,c;

         cin>>a>>b>>c;

         x=a;y=b;z=c;

         return *this;

     }

    void showTime()const{

        if(x<24&&x>=0&&y>=0&&y<60&&z>=0&&z<60)

        cout<<setw(2)<<setfill(‘0‘)<<x<<":"<<setw(2)<<setfill(‘0‘)<<y<<":"<<setw(2)<<setfill(‘0‘)<<z<<endl;

        else

            cout<<"Time error"<<endl;

        }

};

int main()

{

    cout<<"Constant test output :"<<endl;

    const Time c;

    const Time cc(1, 2, 3);

    const Time ccc(23, 60, 60);

    cout<<setw(2)<<setfill(‘0‘)<<c.hour()<<":";

    cout<<setw(2)<<setfill(‘0‘)<<c.minute()<<":";

    cout<<setw(2)<<setfill(‘0‘)<<c.second()<<endl;

    cc.getTime().showTime();

    ccc.showTime();

    cout<<"\nTest data output :"<<endl;

    Time t;

    int cases;

    cin>>cases;

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

    {

        if(i % 4 == 0)

        {

            int hour, minute, second;

            cin>>hour>>minute>>second;

            Time tt(hour, minute, second);

            tt.showTime();

        }

        if(i % 4 == 1)

        {

            int hour, minute, second;

            cin>>hour>>minute>>second;

            t.setTime(hour, minute, second).showTime();

        }

        if(i % 4 == 2)

            t.inputTime().showTime();

        if(i % 4 == 3)

        {

            int hour, minute, second;

            cin>>hour>>minute>>second;

            t.hour(hour);

            t.minute(minute);

            t.second(second);

            t.showTime();

        }

    }

}

时间: 2024-10-11 12:37:39

Problem C: 时间类的常量的相关文章

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 F: 时间类的加、减法赋值运算

Description 封装一个时间类Time,在类上重载以下运算符,使得main()函数能够正确运行. 1. Time::Time()无参构造方法. 2. Time::inputTime()方法:按格式从标准输入读取数据修改Time对象的时分秒数值.该方法返回修改后的对象. 3. Time::showTime()方法:输出"hh:mm:ss",不足两位的要前面补0.如果对象不是合法的时间,则输出"Time error". 4. 运算符 加法赋值运算符"+

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 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)输

Java知多少(77)日期和时间类

Java 的日期和时间类位于 java.util 包中.利用日期时间类提供的方法,可以获取当前的日期和时间,创建日期和时间参数,计算和比较时间. Date 类 Date 类是 Java 中的日期时间类,其构造方法比较多,下面是常用的两个: Date():使用当前的日期和时间初始化一个对象. Date(long millisec):从1970年01月01日00时(格林威治时间)开始以毫秒计算时间,计算 millisec 毫秒.如果运行 Java 程序的本地时区是北京时区(与格林威治时间相差 8 小