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

Description

C++时间类的运算符重载

定义一个时间类Time,其数据成员为表示时间的小时(hour)、分(minute),秒(second)。

重载运算符“+”,使之能用于时间对象的加法运算;重载运算符“<<”,使之能用于时间对象的输出操作。

(1)参加运算的两个操作数可以都是时间类对象,也可以其中有一个是整数(表示秒),顺序任意。

例如,t1+t2,i+t1,t1+i均合法(设i为整数表示秒数, t1,t2为时间类Time对象)。

(2)输出时间对象的方式为 小时:分:秒,例如 14:23:55、00:00:00、23:59:59等。

编写程序,分别求两个时间对象之和、整数和时间对象之和,时间对象和整数之和,并且输出。

Input

一个时间类的小时 分 秒,另一个时间类的小时 分 秒(注意要符合实际)

一个时间类的小时 分 秒,一个整数(表示秒数)

一个整数(表示秒数),一个时间类的小时 分 秒

Output

两个时间之和、时间和整数之和,整数和时间之和。

Sample Input

1 2 3 4 5 6
0 0 0 200
59 14 59 1

Sample Output

t1+t2=5:7:9
t1+i=0:3:20
i+t1=15:0:0
#include <iostream>
using namespace std;
class Time
{
public:
    Time():hour(0),minute(0),second(0) {}
    Time(int h,int m,int s)
    {
        hour=(h>=24||h<0)?0:h;
        minute=(m>=60||m<0)?0:m;
        second=(s>=60||s<0)?0:s;
    }
    Time operator+(Time &);
    Time operator+(int &);
    friend Time operator+(int,Time &);
    friend ostream& operator << (ostream& output, Time & c);
private:
    int hour;
    int minute;
    int second;
};

Time Time::operator+(Time & t)
{
    int h,m,s;
    s=second+t.second;
    m=minute+t.minute;
    h=hour+t.hour;
    if(s>59)
    {
        m+=(s/60);
        s%=60;
    }
    if(m>59)
    {
        h+=(m/60);
        m%=60;
    }
    if(h>23)
        h%=24;
    Time t1(h,m,s);
    return t1;

}

Time Time::operator+(int &s)
{
    Time t1;
    t1.second=s+second;
    t1.minute=minute;
    t1.hour=hour;
    if(t1.second>59)
    {
        t1.minute+=(t1.second/60);
        t1.second%=60;
    }
    if(t1.minute>59)
    {
        t1.hour+=(t1.minute/60);
        t1.minute%=60;
    }
    if(t1.hour>23)
        t1.hour%=24;
    return t1;
}
Time operator+(int s,Time & t)
{
    Time t1;
    t1.second=s+t.second;
    t1.minute=t.minute;
    t1.hour=t.hour;
    if(t1.second>59)
    {
        t1.minute+=(t1.second/60);
        t1.second%=60;
    }
    if(t1.minute>59)
    {
        t1.hour+=(t1.minute/60);
        t1.minute%=60;
    }
    if(t1.hour>23)
        t1.hour%=24;
    return t1;
}

ostream& operator << (ostream& output, Time & c)
{
    output<<c.hour<<":"<<c.minute<<":"<<c.second<<endl;
    return output;
}

int main()
{
//测试Time类对象加Time类对象
    int hour,minute,second;
    cin>>hour>>minute>>second;
    Time t1(hour,minute,second);
    cin>>hour>>minute>>second;
    Time t2(hour,minute,second);
    Time t3=t1+t2;
    cout<<"t1+t2=";
    cout<<t3;

//测试时间对象加整数
    int i;
    cin>>hour>>minute>>second;
    cin>>i;
    t3=Time(hour,minute,second)+i;
    cout<<"t1+i=";
    cout<<t3;

//测试整数加时间对象
    cin>>i;
    cin>>hour>>minute>>second;
    t1=Time(hour,minute,second);
    t3=i+t1;
    cout<<"i+t1=";
    cout<<t3;

    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-07 09:54:59

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

第十七周oj刷题——Problem A: 实现复数类中的加运算符重载【C++运算符重载】

Description int家有i1和i2弟兄俩,小手一拉i1+i2,加起来了:double家有d1和d2姐妹俩,小手也一拉,d1+d2,也加起来了.C++村子里来了复数(Complex)一家子,也有俩兄弟c1和c2,想要来个累加,笨乎乎地,c1.add(c2).c1和c2伤心极了,也想像其他小朋友一样,小手一拉,c1+c2,也能加起来.这个任务交给了正在看题的魔术师,帮他们一个忙,让复数也能用+号相加吧.(可以复制提示部分的代码开始你的编程) Input 四个数,分别代表两个虚数c1和c2的

第十七周oj刷题——Problem D: C++习题 输入输出--公用继承

Description Student类含有私有数据成员:num,name,sex,公有成员函数: 输入函数get_value()和输出函数display().采用公用继承方式实现类Student1,增加数据成员:age,addr,成员函数:get_value_1()和display_1().在程序运行时输入num,name,sex,age,addr的值,调用输出函数输出以上5个数据的值. Input 输入num,name,sex,age,addr的值 Output 输出num,name,sex

第十七周oj刷题——Problem E: C++习题 输入输出--私有继承

Description Student类含有私有数据成员:num,name,sex,公有成员函数: 输入函数get_value()和输出函数display().采用私有继承方式实现类Student1,增加数据成员:age,addr,成员函数:get_value_1()和display_1().在程序运行时输入num,name,sex,age,addr的值,调用输出函数输出以上5个数据的值. Input 输入num,name,sex,age,addr的值 Output 输出num,name,sex

第十七周oj刷题——Problem F: C++习题 输入输出--保护继承

Description Student类含有私有数据成员:num,name,sex,公有成员函数: 输入函数get_value()和输出函数display().采用私有保护方式实现类Student1,增加数据成员:age,addr,成员函数:get_value_1()和display_1().在程序运行时输入num,name,sex,age,addr的值,调用输出函数输出以上5个数据的值. Input 输入num,name,sex,age,addr的值 Output 输出num,name,sex

第十七周oj刷题——Problem B: 分数类的四则运算【C++】

Description 编写分数类Fraction,实现两个分数的加.减.乘和除四则运算.主函数已给定. Input 每行四个数,分别表示两个分数的分子和分母,以0 0 0 0 表示结束. Output 空格分隔的两个分数的减和除的结果. Sample Input 1 2 -1 2 4 3 3 4 0 0 0 0 Sample Output 1 -1 7/12 16/9 /* All rights reserved. * 文件名称:test.cpp * 作者:陈丹妮 * 完成日期:2015年 7

第十五周oj刷题——Problem N: C++习题 复数类--重载运算符3+

Description 请编写程序,处理一个复数与一个double数相加的运算,结果存放在一个double型的变量d1中,输出d1的值,再以复数形式输出此值.定义Complex(复数)类,在成员函数中包含重载类型转换运算符: operator double() { return real; } Input 一个复数与一个double数 Output d1的值和复数形式的此值 Sample Input 3 4 2.5 Sample Output d1=5.50 c2=(5.50, 0.00)  

第十五周oj刷题——Problem K: C++习题 复数类--重载运算符+,-,*,/

Description 定义一个复数类Complex,重载运算符"+","-","*","/",使之能用于复数的加.减.乘.除.运算符重载函数作为Complex类的成员函数.编写程序,分别求两个复数之和.差.积和商. Input 两个复数 Output 两个复数之和.差.积和商 Sample Input 3 4 5 -10 Sample Output c1+c2=(8.00,-6.00i) c1-c2=(-2.00,14.00

第十五周oj刷题——Problem L: C++习题 复数类--重载运算符2+

Description 定义一个复数类Complex,重载运算符"+",使之能用于复数的加法运算.参加运算的两个运算量可以都是类对象,也可以其中有一个是整数,顺序任意.例如,c1+c2,i+c1,c1+i均合法(设i为整数,c1,c2为复数).编写程序,分别求两个复数之和.整数和复数之和. Input 两个复数 一个复数和一个整数 一个整数和一个复数 Output 两个复数之和.复数和整数之和,整数和复数之和. Sample Input 3 4 5 -10 3 4 5 5 3 4 Sa

第十六周oj刷题——Problem C: B 求类中数据成员的最大值-类模板

Description 声明一个类模板,类模板中有三个相同类型的数据成员,有一函数来获取这三个数据成员的最大值. Input 分别输入3个整数,3个浮点数,3个字符 Output 3个整数的最大值 3个浮点数中的最大值 3个字符中的最大值 Sample Input 9 5 6 1.1 3.4 0.9 a b c Sample Output 9 3.40 c /* All rights reserved. * 文件名称:test.cpp * 作者:陈丹妮 * 完成日期:2015年 6 月 25 日