读书人

重载operator-运算符的有关问题

发布时间: 2013-04-09 16:45:09 作者: rapoo

重载operator-运算符的问题

时间类,有三个成员字段:

int m_nHour;// 小时
int m_nMinute;// 分
int m_nSecond;// 秒



CMyTime CMyTime::operator - (const CMyTime& src) const
{
CMyTime temp;
temp.m_nHour = m_nHour - src.m_nHour;
temp.m_nMinute = m_nMinute - src.m_nMinute;
temp.m_nSecond = m_nSecond - src.m_nSecond;
if (temp.m_nSecond < 0)
{
temp.m_nSecond += 60;
temp.m_nMinute -= 1;
}

if (temp.m_nMinute < 0)
{
temp.m_nMinute += 60;
temp.m_nHour -= 1;
}

return temp;
}

这个函数感觉算法不对


举个例子:
14:31:02减去15:40:01,求差距?


手工计算结果为:负的01:08:59(负)

用该函数计算:

second:2-1: 1
minute:31-40: -9
nHour:14-15:-1

minute:

if(-9<0)==> minute:-9+60==51 , Hour: -1-1=-2

结果为:-02 :51:01


显然这结果 和手工的结果不对啊?








统一转换成ticks进行运算
[解决办法]

引用:
应该先判断小时哪个大?然后由此再决定哪个减哪个

按照楼主的说法,应该是先判断小时的大小,如果前者比后者大应该还要再加上24才对啊

读书人网 >C++

热点推荐