Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ =)运算符的日期和重载_C++ - Fatal编程技术网

C++ =)运算符的日期和重载

C++ =)运算符的日期和重载,c++,C++,我不知道我是否真的累了,但这段代码给了我 思维方式运行单元测试时出现的问题。下面的代码中是否有任何错误 bool Date::operator <= (const Date& d) const { if (this != &d) { if (day > d.day) return false; if (hour > d.hour) return false;

我不知道我是否真的累了,但这段代码给了我 思维方式运行单元测试时出现的问题。下面的代码中是否有任何错误

bool Date::operator <= (const Date& d) const {
    if (this != &d) {         
        if (day > d.day)
            return false;
        if (hour > d.hour)
            return false;
        if (minute > d.minute)
            return false;
        if (second > d.second)
            return false;
    }

    return true;
}
只是为了测试,我用这个丑陋的版本替换了它,所有的测试都通过了

bool Date::operator <= (const Date& d) const {
    if (this != &d) {
        long a = (86400 * day) + (3600 * hour) + (60 * minute) + second;
        long b = (86400 * d.day) + (3600 * d.hour) + (60 * d.minute) + d.second;

        return a <= b;
    }

    return true;
}
有人能帮忙吗?
谢谢

那是行不通的。例如,如果dayd.hour,则返回false,这是不正确的

你想要的是:

bool Date::operator <= (const Date& d) const {
    if (this != &d) {
        if (day < d.day)
            return true;
        if (day > d.day)
            return false;
        if (hour < d.hour)
            return true;
        if (hour > d.hour)
            return false;
        if (minute < d.minute)
            return true;
        if (minute > d.minute)
            return false;
        if (second > d.second)
            return false;
    }
    return true;
}

我会利用std::tie可用的词典比较来实现bool运算符,然后实现bool运算符我可能会实现类似return*thisd;。要求人们发现代码中的错误并不特别有效。您应该使用调试器或添加打印语句来隔离问题,方法是跟踪程序的进度,并将其与预期发生的情况进行比较。一旦这两个问题出现分歧,你就发现了问题所在。如果必要的话,你应该建立一个新的Charlesworth你太苛刻了。我认为这是一个关于如何比较日期的有效问题,同时也给出了她/他已经尝试过的信息。@NikosC:我不同意。这是我的代码问题出了什么问题,在这种情况下,它应该足够简单,可以用失败的测试用例和调试器或打印语句来追踪。对OP:我想为了不让你的问题结束,您应该重新措辞,使其看起来不像是查看此代码,而是直接询问如何有效地比较两个日期。
#include <tuple>

....

bool Date::operator<(const Date& rhs) const
{
    return std::tie(day, hour, minute, second) < 
           std::tie(rhs.day, rhs.hour, rhs.minute, rhs.second);
}