zoukankan      html  css  js  c++  java
  • 时间类的改进(运算符重载)

    【问题描述】
    对前面实验写过的Time类进行修改,删去Add和Sub成员函数,通过重载“+”、“-”运算符直接进行时间的加减运算。
    提示:
    (1)可以用友元函数来实现“+”“-”运算符的重载。
    (2)加法运算符可以是两个Time对象进行相加,也可以是一个表示秒数的int型数据加上一个Time对象,还可以是Time对象加上int型数据,得到的结果都是Time类型的对象。
    (3)减法运算符可以是两个Time对象进行相减,也可以是Time对象减去一个表示秒数的int型数据,得到的结果都是Time类型的对象。

    主函数设计如下,请勿修改:

    int main(){
    Time t1(2,34),t2,t3;
    t2.SetTime(13,23,34);
    cout<<"t1+t2:";
    t3=t1+t2;//两个Time类对象相加
    t3.print_24();
    cout<<"
    t1+65:";
    t3=t1+65;//Time类对象加上65秒
    t3.print_24();
    cout<<"
    65+t1:";
    t3=65+t1;//65秒加上Time类对象
    t3.print_24();
    cout<<"
    t2-t1:";
    t3=t2-t1;//两个Time类对象相减
    t3.print_24();
    cout<<"
    t1-70:";
    t3=t1-70;//Time类对象减去70秒
    t3.print_24();
    return 0;
    }
    

    【样例输出】
    t1+t2:15:57:34
    t1+65:02:35:05
    65+t1:02:35:05
    t2-t1:10:49:34
    t1-70:02:32:50

    #include <iostream>
    #include <iomanip>
    #include <math.h>
    using namespace std;
    
    class Time
    {
    private:
        int hour,minute,second;
    public:
        int SecCalc(){ return(hour*60+minute)*60+second; }//返回总秒数
        Time(int h,int m,int s=0);//构造函数
        Time(int s=0);//根据总秒数计算hour、minute、second并构造对象
        void SetTime(int h=0,int m=0, int s=0);
        void print_12();//按12小时格式显示时间
        void print_24();//按24小时格式显示时间
    
        //重载“+”运算符
        //1. 两个对象相加:两种实现方法选一种
        Time operator+(const Time & t) const;//成员函数
        //friend Time operator+(const Time & t1, const Time & t2);//友元函数
        //friend Time operator+(Time & t1, Time & t2);//友元函数
        //2. 一个表示秒数的int型数据加上一个Time对象:只能用友元函数实现
        friend Time operator+(int s, Time & t);//友元函数
        //3. Time对象加上int型数据:两种实现方法选一种
        Time operator+(int s);//成员函数
        //friend Time operator+(Time & t, int s);//友元函数
    
        //重载“-”运算符
        //1. 两个Time对象进行相减:两种实现方法选一种
        Time operator-(Time & t);//成员函数
        //friend Time operator-(Time & t1, Time & t2);//友元函数
        //2. Time对象减去一个表示秒数的int型数据:两种实现方法选一种
        Time operator-(int s);//成员函数
        //friend Time operator-(Time & t, int s);//友元函数
    };
    
    Time::Time(int h,int m,int s)//构造函数
    {
        hour = h; minute = m; second = s;
    }
    
    Time::Time(int s)//根据总秒数计算hour、minute、second并构造对象
    {
        hour = s/3600;
        minute = (s-hour*3600)/60;
        second = s-hour*3600-60*minute;
    }
    
    void Time::SetTime(int h,int m, int s)
    {
        hour = h; minute = m; second = s;
    }
    
    void Time::print_12()//按12小时格式显示时间
    {
        if(hour>12)
        {
            cout << setw(2) << setfill('0') << hour-12 << ":" << setw(2) << setfill('0') << minute << ":" << setw(2) << setfill('0') << second << " PM";
        }
        else
        {
            cout << setw(2) << setfill('0') << hour << ":" << setw(2) << setfill('0') << minute << ":" << setw(2) << setfill('0') << second << " AM";
        }
    }
    
    void Time::print_24()//按24小时格式显示时间
    {
        cout << setw(2) << setfill('0') << hour << ":" << setw(2) << setfill('0') << minute << ":" << setw(2) << setfill('0') << second;
    }
    
    //重载“+”运算符
    //1. 两个对象相加:两种实现方法选一种
    Time Time::operator+(const Time & t) const//成员函数
    {
        //最普通的运算方法
        Time tt;
        tt.second = second+t.second;
        tt.minute = tt.second/60 + minute + t.minute;
        tt.second %= 60;
        tt.hour = tt.minute/60 + hour + t.hour;
        tt.minute %= 60;
        tt.hour %= 24;
        return tt;
    }
    
    /*
    Time operator+(const Time & t1, const Time & t2)//友元函数
    {
        //最普通的运算方法
        Time tt;
        tt.second = t1.second+t2.second;
        tt.minute = tt.second/60 + t1.minute + t2.minute;
        tt.second %= 60;
        tt.hour = tt.minute/60 + t1.hour + t2.hour;
        tt.minute %= 60;
        tt.hour %= 24;
        return tt;
    }
    
    Time operator+(Time & t1, Time & t2)//友元函数
    {
        //利用提供的SecCalc()函数
        int s = t1.SecCalc() + t2.SecCalc();
        Time tt(s);
        return tt;
    }
    */
    
    //2. 一个表示秒数的int型数据加上一个Time对象:只能用友元函数实现
    Time operator+(int s, Time & t)//友元函数
    {
        s += t.SecCalc();
        Time tt(s);
        return tt;
    }
    
    /*
    Time operator+(int s, Time & t)//友元函数
    {
        //利用秒数构造函数和前面刚定义的两个对象的加法
        Time tt(s);
        return tt+t;
    }
    */
    
    //3. Time对象加上int型数据:两种实现方法选一种
    Time Time::operator+(int s)//成员函数
    {
        s += this->SecCalc();
        Time tt(s);
        return tt;
    }
    
    /*
    Time operator+(Time & t, int s)//友元函数
    {
        s += t.SecCalc();
        Time tt(s);
        return tt;
    }
    */
    
    //重载“-”运算符
    //1. 两个Time对象进行相减:两种实现方法选一种
    Time Time::operator-(Time & t)//成员函数
    {
        int s = fabs( this->SecCalc() - t.SecCalc() );
        Time tt(s);
        return tt;
    }
    
    /*
    Time operator-(Time & t1, Time & t2)//友元函数
    {
        int s = fabs( t1.SecCalc() - t2.SecCalc() );
        Time tt(s);
        return tt;
    }
    */
    
    //2. Time对象减去一个表示秒数的int型数据:两种实现方法选一种
    Time Time::operator-(int s)//成员函数
    {
        s = fabs( this->SecCalc() - s );
        Time tt(s);
        return tt;
    }
    
    /*
    Time operator-(Time & t, int s)//友元函数
    {
        s = fabs( s - t.SecCalc() );
        Time tt(s);
        return tt;
    }
    */
    
    int main()
    {
        Time t1(2,34),t2,t3;
        t2.SetTime(13,23,34);
        cout<<"t1+t2:";
        t3=t1+t2;//两个Time类对象相加
        t3.print_24();
        cout<<"
    t1+65:";
        t3=t1+65;//Time类对象加上65秒
        t3.print_24();
        cout<<"
    65+t1:";
        t3=65+t1;//65秒加上Time类对象
        t3.print_24();
        cout<<"
    t2-t1:";
        t3=t2-t1;//两个Time类对象相减
        t3.print_24();
        cout<<"
    t1-70:";
        t3=t1-70;//Time类对象减去70秒
        t3.print_24();
        return 0;
    }
    
    
  • 相关阅读:
    struts2标签处理下拉列表
    JS中parseInt使用问题解析
    使用jquery异步无刷新删除
    html中table标签的td标签居中左(右)对齐
    struts2拦截器来防止sql注入
    在S2SH中调用返回参数的存储过程
    使用jquery的getJSON从服务器端获得数据
    【vue】vuecli中 对于public文件夹的处理
    oracle10新建表时大小定问题
    会议记录
  • 原文地址:https://www.cnblogs.com/yuzilan/p/10626145.html
Copyright © 2011-2022 走看看