c++ - 运算符重载,先重载加后重载减,减的操作不正确

查看:111
本文介绍了c++ - 运算符重载,先重载加后重载减,减的操作不正确的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

1.运算符重载,先重载加后重载减,减的操作不正确

减去后的正常时间应该0小时52分钟38秒
但是结果是1小时-7分钟-22秒
错误在哪里?应该如何改进?错误的原因是?

请输入代码
#include<iostream>
using namespace std;
class Time
{
private:
    int hour,minute,second;
public:
    Time(int x,int y,int z)
    {hour=x;minute=y;second=z;}
    Time operator+(Time c1)
    {
        if(second+c1.second>59)
        {minute++;second-=60;}
        if(minute+c1.minute>59)
        {hour++;minute-=60;}
        return Time(hour+c1.hour,minute+c1.minute,second+c1.second);
    }
    Time operator-(Time c1)
    {
        if(second-c1.second<0)
        {minute--;second+=60;}
        if(minute-c1.minute<0)
        {hour--;minute+=60;}
        return Time(hour-c1.hour,minute-c1.minute,second-c1.second);
    }
    void out()
    {
        cout<<hour<<" hour "<<minute<<" minute "<<second<<" second"<<endl;
    }
};
int main()
{
    Time a(9,27,30),b(8,34,52);
    (a+b).out();
    (a-b).out();
    return 0;
}

解决方案

加减重载改成下面这样

Time operator+(Time c1)
{
    int t_hour = hour;
    int t_minute = minute;
    int t_second = second;
    if(second+c1.second>59)
    {t_minute++;t_second-=60;}
    if(minute+c1.minute>59)
    {t_hour++;t_minute-=60;}
    return Time(t_hour+c1.hour,t_minute+c1.minute,t_second+c1.second);
}
Time operator-(Time c1)
{
    int t_hour = hour;
    int t_minute = minute;
    int t_second = second;
    if(second-c1.second<0)
    {t_minute--;t_second+=60;}
    if(minute-c1.minute<0)
    {t_hour--;t_minute+=60;}
    return Time(t_hour-c1.hour,t_minute-c1.minute,t_second-c1.second);
}

这篇关于c++ - 运算符重载,先重载加后重载减,减的操作不正确的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆