Перегрузка == оператор C ++ - PullRequest
2 голосов
/ 05 апреля 2011

я выполнил перегрузку оператора +, но теперь я хочу перегрузить оператор == двух длин (может быть или не иметь одинаковую длину) и вернуть соответствующие результаты. Как мне это сделать? Нужно ли использовать bool для ==?

// что я сделал для оператора перегрузки +, чтобы получить новую длину из 2 разных длин

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);
}

Ответы [ 4 ]

5 голосов
/ 05 апреля 2011

Для простого случая используйте bool operator==(const Length& other) const.Обратите внимание на const - оператор сравнения не должен изменять свои операнды.Не должен ваш operator+!

Если вы хотите воспользоваться неявными преобразованиями с обеих сторон, объявите оператор сравнения в глобальной области видимости:

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

3 голосов
/ 05 апреля 2011

Используйте bool и обязательно добавьте const.

bool operator==(const Length& lengthA) const { return ...; }

Вы также можете сделать его глобальным с двумя аргументами (по одному для каждого объекта).

1 голос
/ 05 апреля 2011

Да, оператор равенства является операцией сравнения.Вы вернете логическое значение, указывающее правильное состояние.Это было бы что-то вроде этого:

bool operator== (const Length& lengthA, const Length& lengthB) const {
    return (lengthA.min == lengthB.min) && (lengthA.max == lengthB.max);
}
1 голос
/ 05 апреля 2011
...