m0_61898235 2021-10-03 21:59 采纳率: 100%
浏览 245
已结题

C++编写一个时间类 实现时间的加减运算并输出 同时实现正数计时和倒数计时

C++编写一个时间类 实现时间的加减运算并输出 同时实现正数计时和倒数计时

  • 写回答

1条回答 默认 最新

  • yangbocsu Java领域新星创作者 2021-10-03 22:00
    关注
    
    
    #include<iostream>
    #include<windows.h>
    using namespace std;
    
    class Time {
    public:
        int minute;
        int sec;
        Time() {                            //默认构造函数
            minute = 0;
            sec = 0;
        }
        Time(int m, int s):minute(m), sec(s)//构造函数重载
        {}                                    
        Time& operator++();                    //声明运算符“++”重载为成员函数
        Time& operator--();                    //声明运算符“--”重载为成员函数
        friend Time& operator+=(Time& a, Time& b);
        //声明运算符“+=”重载为友元函数
        friend Time& operator-=(Time& a, Time& b);                    
        //声明运算符“-=”重载为友元函数
        void Print();
    };
    Time& Time::operator++() {                //重载“++”运算符
        sec++;
        if (sec >= 60) {
            sec -= 60;
            minute++;
        }
        return *this;
    }
    Time& Time::operator--() {                //重载“--”运算符
        sec--;
        if (sec < 0) {
            sec += 60;
            minute--;
        }
        return *this;
    }
    Time& operator+=(Time& a, Time& b) {    //重载“+=”运算符
        int minute;
        int sec;
        if (a.sec + b.sec >= 60) {
            a.sec += b.sec;
            a.sec -= 60;
            a.minute++;
        }
        else {
            a.sec += b.sec;
        }
        if (a.minute + b.minute >= 60) {
            a.minute += b.minute;
            a.minute -= 60;
        }
        else {
            a.minute += b.minute;
        }
        return a;
    }
        
    Time& operator-=(Time& a, Time& b) {    //重载“-=”运算符
        int minute;
        int sec;
        int t1, t2, t;
        t1 = a.minute * 60 + a.sec;
        t2 = b.minute * 60 + b.sec;
        if (t1 >= t2) {
            t = t1 - t2;
        }
        else {
            t = t2 - t1;
        }
        a.minute = t / 60;
        a.sec = t % 60;
        return a;
    }
    
    void Time::Print() {                    //显示成员函数
        cout << "当前时间是:";
        cout << minute << "分" << sec << "秒" << endl;
    }
    
    int main() {
        Time time1, time2, time3;
        int a;
        cout << "请输入分钟:" << endl;
        cin >> time1.minute;
        cout << "请输入秒钟:" << endl;
        cin >> time1.sec;
        cout << "当前时间是:" << time1.minute << "分:" << time1.sec << "秒" << endl;
        cout << "--------------------------------" << endl;
        cout << "请输入操作" << endl << "1.整数计时" << endl << "2.倒数计时" << endl << "3.时间相加" << endl << "4.时间相减" << endl;
        cout << "--------------------------------" << endl;
        while (scanf("%d", &a) != EOF) {
            switch (a) {
            case 1:
                for (int i = 0; i < 8; i++) {
                    ++time1;
                    Sleep(1000);
                    time1.Print();
                }
                break;
            case 2:
                for (int i = 0; i < 8; i++) {
                    --time1;
                    Sleep(1000);
                    time1.Print();
                }
                break;
            case 3:
                cout << "请输入需要相加的时间(分钟)" << endl;
                cin >> time2.minute;
                cout << "请输入需要相加的时间(秒钟)" << endl;
                cin >> time2.sec;
                time1 += time2;
                time1.Print();
                break;
            case 4:
                cout << "请输入需要相减的时间(分钟)" << endl;
                cin >> time3.minute;
                cout << "请输入需要相减的时间(秒钟)" << endl;
                cin >> time3.sec;
                time1 -= time3;
                time1.Print();
                break;
            }
        }
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月17日
  • 已采纳回答 10月17日
  • 创建了问题 10月3日

悬赏问题

  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state