• 第八周项目2-Time类中的运算符重载


    实现Time类中的运算符重载。

    class CTime
    {
    private:
        unsigned short int hour;    // 时
        unsigned short int minute;  // 分
        unsigned short int second;  // 秒
    public:
        CTime(int h=0,int m=0,int s=0);
        void setTime(int h,int m,int s);
        void display();
        //二目的比较运算符重载
        bool operator > (CTime &t);
        bool operator < (CTime &t);
        bool operator >= (CTime &t);
        bool operator <= (CTime &t);
        bool operator == (CTime &t);
        bool operator != (CTime &t);
        //二目的加减运算符的重载
        //返回t规定的时、分、秒后的时间
        //例t1(8,20,25),t2(11,20,50),t1+t2为19:41:15
        CTime operator+(CTime &t);
        CTime operator-(CTime &t);//对照+理解
        CTime operator+(int s);//返回s秒后的时间
        CTime operator-(int s);//返回s秒前的时间
        //二目赋值运算符的重载
        CTime operator+=(CTime &c);
        CTime operator-=(CTime &c);
        CTime operator+=(int s);//返回s秒后的时间
        CTime operator-=(int s);//返回s秒前的时间
    };

    提示1:并不是所有比较运算重载函数都很复杂 

    //比较运算返回的是比较结果,是bool型的true或false
    //可以直接使用已经重载了的运算实现新运算,例如果已经实现了 > ,则实现 <= 就可以很方便了……
    bool CTime::operator <= (CTime &t) // 判断时间t1<=t2
    {
        if (*this > t) return false;
        return true;
    }
    

    提示2:并不是所有复合赋值运算重载函数都需要很复杂

    //可以直接使用已经重载了的加减运算实现
    //这种赋值, 例如 t1+=20,直接改变当前对象的值,所以在运算完成后,将*this作为返回值
    CTime CTime::operator+=(CTime &c)
    {
        *this=*this+c;
        return *this;
    }


    提示3:请自行编制用于测试的main()函数,有些结果不必依赖display()函数,提倡用单步执行查看结果
    /*
    * Copyright (c) 2015,烟台大学计算机学院
    * All right reserved.
    * 作者:邵帅
    * 文件:Demo.cpp
    * 完成时间:2015年04月29日
    * 版本号:v1.0
    */
    #include <iostream>
    using namespace std;
    class CTime
    {
    private:
        unsigned short int hour;    // 时
        unsigned short int minute;  // 分
        unsigned short int second;  // 秒
    public:
        CTime(int h=0,int m=0,int s=0);
        void setTime(int h,int m,int s);
        void display();
        //二目的比较运算符重载
        bool operator > (CTime &t);
        bool operator < (CTime &t);
        bool operator >= (CTime &t);
        bool operator <= (CTime &t);
        bool operator == (CTime &t);
        bool operator != (CTime &t);
        //二目的加减运算符的重载
        //返回t规定的时、分、秒后的时间
        //例t1(8,20,25),t2(11,20,50),t1+t2为19:41:15
        CTime operator+(CTime &t);
        CTime operator-(CTime &t);//对照+理解
        CTime operator+(int s);//返回s秒后的时间
        CTime operator-(int s);//返回s秒前的时间
        //二目赋值运算符的重载
        CTime operator+=(CTime &c);
        CTime operator-=(CTime &c);
        CTime operator+=(int s);//返回s秒后的时间
        CTime operator-=(int s);//返回s秒前的时间
    };
    CTime::CTime(int h,int m,int s)
    {
        hour=h;
        minute=m;
        second=s;
    }
    void CTime::setTime(int h,int m,int s)
    {
        hour=h;
        minute=m;
        second=s;
    }
    void CTime::display()
    {
        cout<<hour<<":"<<minute<<":"<<second<<endl;
    }
    bool CTime::operator > (CTime &t)
    {
        int s1,s2;
        s1=hour*3600+minute*60+second;
        s2=t.hour*3600+t.minute*60+t.second;
        if (s1>s2) return true;
        else
            return false;
    }
    bool CTime::operator < (CTime &t)
    {
        int s1,s2;
        s1=hour*3600+minute*60+second;
        s2=t.hour*3600+t.minute*60+t.second;
        if (s1<s2) return true;
        else
            return false;
    }
    bool CTime::operator >= (CTime &t)
    {
        if (*this > t) return true;
        return false;
    
    }
    bool CTime::operator <= (CTime &t)
    {
        if (*this > t) return false;
        return true;
    }
    bool CTime::operator == (CTime &t)
    {
        int s1,s2;
        s1=hour*3600+minute*60+second;
        s2=t.hour*3600+t.minute*60+t.second;
        if (s1==s2) return true;
        else
            return false;
    }
    bool CTime::operator != (CTime &t)
    {
        int s1,s2;
        s1=hour*3600+minute*60+second;
        s2=t.hour*3600+t.minute*60+t.second;
        if (s1!=s2) return true;
        else
            return false;
    }
    CTime CTime::operator+(CTime &t)
    {
        int s;
        s=t.hour*3600+t.minute*60+t.second;
        while (s--)
        {
            second++;
            if (second>60)
            {
                minute++;
                second=1;
            }
            if (minute>60)
            {
                hour++;
                minute=1;
            }
        }
        CTime a(hour,minute,second);
        return a;
    }
    CTime CTime::operator-(CTime &t)
    {
        int s;
        s=t.hour*3600+t.minute*60+t.second;
        while (s--)
        {
            second--;
            if (second<0)
            {
                minute--;
                second=60;
            }
            if (minute<0)
            {
                hour--;
                minute=60;
            }
        }
        CTime a(hour,minute,second);
        return a;
    }
    CTime CTime::operator+(int s)
    {
        while (s--)
        {
            second++;
            if (second>60)
            {
                minute++;
                second=1;
            }
            if (minute>60)
            {
                hour++;
                minute=1;
            }
        }
        CTime a(hour,minute,second);
        return a;
    }
    CTime CTime::operator-(int s)
    {
        while (s--)
        {
            second--;
            if (second<0)
            {
                minute--;
                second=60;
            }
            if (minute<0)
            {
                hour--;
                minute=60;
            }
        }
        CTime a(hour,minute,second);
        return a;
    }
    CTime CTime::operator+=(CTime &c)
    {
        *this=*this+c;
        return *this;
    }
    CTime CTime::operator-=(CTime &c)
    {
        *this=*this-c;
        return *this;
    }
    CTime CTime::operator+=(int s)
    {
        *this=*this+s;
        return *this;
    }
    CTime CTime::operator-=(int s)
    {
        *this=*this-s;
        return *this;
    }
    int main()
    {
        CTime t1(8,20,25),t2(11,20,50),t;
        cout<<"t1为:";
        t1.display();
        cout<<"t2为:";
        t2.display();
        cout<<"下面比较两个时间大小:
    ";
        if (t1>t2) cout<<"t1>t2"<<endl;
        if (t1<t2) cout<<"t1<t2"<<endl;
        if (t1==t2) cout<<"t1=t2"<<endl;
        if (t1!=t2) cout<<"t1≠t2"<<endl;
        if (t1>=t2) cout<<"t1≥t2"<<endl;
        if (t1<=t2) cout<<"t1≤t2"<<endl;
        cout<<endl;
    }
    
    运行结果:



    @ Mayuko

  • 相关阅读:
    rails 与 mysql 5.X for win不兼容
    Ruby开发环境的终极配置(Railsinstaller1.3.0+mysql5.1.61)
    irb的子会话
    Table.ReorderColumns移动…Reorder…(Power Query 之 M 语言)
    Vlookup大叔与一对多查找(Excel函数集团)
    Table.FillDown填充Table.Fill…(Power Query 之 M 语言)
    转置Table.Transpose(Power Query 之 M 语言)
    合并函数Combiner.Combine…(Power Query 之 M 语言)
    List.Sum…统计信息(Power Query 之 M 语言)
    透视列Table.Pivot一维转二维(Power Query 之 M 语言)
  • 原文地址:https://www.cnblogs.com/mayuko/p/4567502.html
Copyright © 2020-2023  润新知