-1
bool operator < (Time obj_a, Time obj_b)
{
 return ((obj_a.hours<=obj_b.hours || obj_a.minutes<=obj_b.minutes) &&  
 (obj_a.hours<=obj_b.hours || obj_a.minutes<=obj_b.minutes));
}
bool operator > (Time obj_a, Time obj_b)
{
 return (obj_a.hours>=obj_b.hours || obj_a.minutes>=obj_b.minutes);
}
bool operator == (Time obj_a, Time obj_b)
{
 return (obj_a.hours==obj_b.hours && obj_a.minutes==obj_b.minutes);
}

有人可以告诉我这些运算符有什么问题吗?他们正在比较小时和分钟的时间。但我没有得到正确的比较。我已经定义了一类时间,其中存储了小时和分钟。

4

1 回答 1

2

这段代码有很多问题。首先,您将<比较减少为<=比较,这(如果您的逻辑的其余部分是正确的)将意味着相等的时间将比较<or >,具体取决于比较例程的参数顺序。

然后,

((obj_a.hours<=obj_b.hours || obj_a.minutes<=obj_b.minutes) &&  
 (obj_a.hours<=obj_b.hours || obj_a.minutes<=obj_b.minutes))

在 an 中执行完全相同的比较两次&&,所以它实际上只是在做

obj_a.hours<=obj_b.hours || obj_a.minutes<=obj_b.minutes

这不起作用,因为它希望小时分钟为. 这意味着<=因为.<=11:3010:4030 <= 40

解决此问题的最简单方法是将时间对象的比较减少到仅分钟的比较,例如

a.hours * 60 + a.minutes < b.hours * 60 + b.minutes
于 2012-12-16T16:31:56.867 回答