运算符重载实现时间加减

运算符重载实现时间加减

这是我对象给我的灵感,写完后自我感觉还不错,就打算记录下来!
开始她是让我举一个重载+=运算符函数给她,有点发难,想了好长时间才想出来以时间为载体来举这个例子!开始给她只有一个'+='重载的例子,后来又补充了+-重载!

涉及知识点:运算符重载,+重载,-重载,+=重载

我的代码:
#include <iostream>
#include <stdlib.h>
using namespace std;
// 声明并定义一个时间类,用于两个时间相加
class SelfTime
{
public:
    SelfTime();
    SelfTime(int, int, int);
    // 重载运算符 +
    SelfTime operator + (const SelfTime& time)
    {
        SelfTime selftime;
        int ans;
        int ans_time = time.hour * 3600 + (time.minutes * 60) + time.second;
        int ans_self = hour * 3600 + (minutes * 60) + second;
        ans = ans_time + ans_self;
        // 对时、分、秒进行进制转换
        selftime.second = ans % 60;
        selftime.minutes = ans % 3600 / 60;
        selftime.hour = ans / 3600;
        return selftime;
    }
    // 此处返回的为两个时间的差量,无正负之分
    SelfTime operator - (const SelfTime& time)
    {
        SelfTime selftime;
        int ans;
        int ans_time = time.hour * 3600 + (time.minutes * 60) + time.second;
        int ans_self = hour * 3600 + (minutes * 60) + second;
        if (ans_time > ans_self) ans = ans_time - ans_self;
        else ans = ans_self - ans_time;
        // 对时、分、秒进行进制转换
        selftime.second = ans % 60;
        selftime.minutes = ans % 3600 / 60;
        selftime.hour = ans / 3600;
        return selftime;
    }
    // 重载运算符 +=
    void operator += (const SelfTime& time)
    {
        // 先将所有时间全部转为秒,便于后面转换
        int ans =
            second + time.second +
            ((minutes + time.minutes) * 60) +
            ((hour + time.hour) * 3600);

        // 对时、分、秒进行进制转换
        second = ans % 60;
        minutes = ans % 3600 / 60;
        hour = ans / 3600;

    }
    // 打印
    void display()
    {
        cout << hour << "小时" << minutes << "分" << second << "秒" << endl;
    }

private:
    // 数据成员时、分、秒
    int hour;
    int minutes;
    int second;
};

SelfTime::SelfTime()
{
    hour = 0;
    minutes = 0;
    second = 0;
}

SelfTime::SelfTime(int h, int m, int s)
{
    hour = h;
    minutes = m;
    second = s;
}

int main()
{
    SelfTime a(1, 1, 20);
    SelfTime b(2, 1, 10);
    SelfTime c;
    SelfTime d;
    c = a + b;    // 结果应为:3小时2分30秒
    d = a - b;  // 结果应为:1小时1分10秒
    a += b;        // 结果应为:3小时2分30秒
    c.display();
    d.display();
    a.display();
    system("pause");
    return 0;
}
/*
输出结果:
3小时2分30秒
0小时59分50秒
3小时2分30秒
*/
最后修改:2019 年 04 月 19 日 05 : 43 PM

发表评论