在C++中重载"=="运算符

4
我已经对+运算符进行了重载,但现在我想对两个长度(可能相同,也可能不同)的长度进行==运算符的重载,并返回相应的结果。我该怎么做?我需要使用bool来实现==吗?
//我对+运算符进行的重载以获取两个不同长度的新长度
Length operator+ (const Length& lengthA){       

    int newlengthMin = min, newlengthMax = max;

    if (lengthA.min < min)
        newLengthMin = lengthA.min;
    if  (lengthA.max > max)
        newLengthMax = lengthA.max;

    return Length(newLengthMin, newLengthMax);
}

只能有一个结果。请注意,运算符“==”是一种比较(或应该是为了保持一致性)。因此,它应该根据两个长度的相等比较返回true/false。 - Martin York
哦,好的,所以从某种意义上讲,它根据比较自动返回答案给你,对吧? - andrew
4个回答

7

对于简单情况,请使用bool operator==(const Length& other) const。注意const - 比较运算符不应修改其操作数。你的operator+也不应该修改操作数!

如果你想利用两边的隐式转换,声明全局范围内的比较运算符:

bool operator==(const Length& a, const Length& b) {...}


6
使用bool,并确保添加const。
bool operator==(const Length& lengthA) const { return ...; }

您也可以将其全局化,使用两个参数(每个对象一个)。

2

是的,等号操作符是一种比较运算符。它会返回一个布尔值,表示正确的条件。代码大致如下:

bool operator== (const Length& lengthA, const Length& lengthB) const {
    return (lengthA.min == lengthB.min) && (lengthA.max == lengthB.max);
}

1

1
嗯...这是逻辑“与”运算符。如果你没有这种先前的知识,就不应该尝试处理运算符重载。试着从头开始学习教程吧! - salezica
太大的一口美味馅饼,你无法抗拒……哈哈,无论如何还是谢谢。 - andrew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接