Перегрузка оператора - сравните объект с целым числом

0

Как перегрузить оператор <, если у меня есть сам объект слева и целое справа?

Я знаю, как перегрузить оператор "<", если я хочу сравнить объект с самим собой. т.е.

  bool NumberClass::operator<(NumberClass integer) {

if (this->integer < integer.number) {
    return true;
} else
    return false;
 }

где number - частный член класса NumberClass

Это работает, когда я делаю объект NumberClass, но как мне создать оператор-функцию, если я хочу сравнить элемент данных объектов с целым числом?

  • 0
    Точно так же, просто с другим типом параметра?
Теги:
operator-overloading

2 ответа

2
Лучший ответ

Это должно делать свое дело:

bool NumberClass::operator<(int integer_) {
  return (this->integer < integer_);
}

BTW, считается плохим стилем, чтобы сделать оператор if, который отделяет только два оператора return true/false. Это должно быть написано непосредственно, как сделано в моем примере.

2

Итак, у вас есть NumberClass как с левой, так и с правой стороны operator <, правильно?

bool NumberClass::operator<( const NumberClass &rhs ) const
{
    return integer < rhs.integer;  
}

Если вы хотите сравнить с простым int вместо этого, вы просто изменяете тип параметра:

bool NumberClass::operator<( int rhs ) const
{
    return integer < rhs;  
}

Оба могут сосуществовать, потому что C++ позволяет перегружать.

Некоторые примечания стиля:

  • Вам не нужно this в методах.
  • rhs означает "правая сторона". Вы увидите это во многих определениях operator.
  • Вы можете возвращать логический результат сравнения напрямую. Обычно это предпочтительнее, чем переносить его в оператор if как вы это делали.
  • Вы должны объявить эти методы const, чтобы они могли работать с const экземплярами класса.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню