zoukankan      html  css  js  c++  java
  • 问题 C: B C++时间类的运算符重载

    题目描述

    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等。

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

    请在下面的程序段基础上完成设计:
    #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;
    };

    //将程序需要的其他成份写在下面,只提交begin到end部分的代码
    //******************** begin ********************


    //********************* end ********************
    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;

    输入

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

    输出

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

    样例输入

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

    样例输出

    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;
    };
    
    //将程序需要的其他成份写在下面,只提交begin到end部分的代码
    //******************** begin ********************
    Time Time::operator+(Time &t)
    {
    	Time tmp;
    	tmp.hour = hour + t.hour;
    	tmp.minute = minute + t.minute;
    	tmp.second = second + t.second;
    	if(tmp.second >= 60)
    	{
    		tmp.minute = tmp.minute + tmp.second/60;
    		tmp.second = tmp.second % 60;
    		if(tmp.minute >= 60)
    		{
    			tmp.hour = tmp.hour + tmp.minute/60;
    			tmp.minute = tmp.minute % 60;
    			if(tmp.hour >= 24)
    			{
    				tmp.hour = tmp.hour % 24;
    			}
    		}
    	}
    	
    	return tmp;
    }
    
    Time Time::operator+(int &t)
    {
    	Time tmp;
    	tmp.hour = hour;
    	tmp.minute = minute;
    	tmp.second = second + t;
    	if(tmp.second >= 60)
    	{
    		tmp.minute = tmp.minute + tmp.second/60;
    		tmp.second = tmp.second % 60;
    		if(tmp.minute >= 60)
    		{
    			tmp.hour = tmp.hour + tmp.minute/60;
    			tmp.minute = tmp.minute % 60;
    			if(tmp.hour >= 24)
    			{
    				tmp.hour = tmp.hour % 24;
    			}
    		}
    	} 
    	
    	return tmp;
    }
    
    Time operator + (int s, Time &tmp)
    {
    	tmp.second = tmp.second + s;
    	if(tmp.second >= 60)
    	{
    		tmp.minute = tmp.minute + tmp.second/60;
    		tmp.second = tmp.second % 60;
    		if(tmp.minute >= 60)
    		{
    			tmp.hour = tmp.hour + tmp.minute/60;
    			tmp.minute = tmp.minute % 60;
    			if(tmp.hour >= 24)
    			{
    				tmp.hour = tmp.hour % 24;
    			}
    		}
    	} 
    	
    	return tmp;
    }
    
    ostream & operator << (ostream &output, Time & tmp)
    {
    	output << tmp.hour << ":" << tmp.minute << ":" << tmp.second << endl;
    	return output;
    } 
    
    //********************* end ********************
    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;
    }
    

      

  • 相关阅读:
    编译原理-第二章 一个简单的语法指导编译器-2.4 语法制导翻译
    编译原理-第二章 一个简单的语法指导编译器-2.3 语法定义
    编译原理-第二章 一个简单的语法指导编译器-2.2 词法分析
    LeetCode 1347. Minimum Number of Steps to Make Two Strings Anagram
    LeetCode 1348. Tweet Counts Per Frequency
    1349. Maximum Students Taking Exam(DP,状态压缩)
    LeetCode 1345. Jump Game IV(BFS)
    LeetCode 212. Word Search II
    LeetCode 188. Best Time to Buy and Sell Stock IV (动态规划)
    LeetCode 187. Repeated DNA Sequences(位运算,hash)
  • 原文地址:https://www.cnblogs.com/mjn1/p/10648106.html
Copyright © 2011-2022 走看看