Перегрузка оператора + в C++

Хорошо, я работаю через книгу и пытаюсь изучить перегрузку оператора C++. Я создал класс BigInt, который берет единственный интервал (первоначально набор к 0) для конструктора. Я перегрузился + = метод, и он работает просто великолепно в следующем коде:

BigInt x = BigInt(2);
x += x;
x.print( cout );

Код произведет 4. Так, затем я работал над перегрузкой глобального оператора + использование следующего кода:

BigInt operator+(const BigInt lhs, const BigInt rhs)
{
    BigInt returnValue(lhs);
    returnValue += rhs;
    return returnValue;
}

Это также хорошо работает для следующего кода:

BigInt x = BigInt(1);
BigInt y = BigInt(5);
BigInt z = x + y;
z.print();

Это распечатывает 6. Однако, когда я пытаюсь выполнить следующий код, он просто не работает. Книга не объясняет очень хорошо и подразумевает, что должна просто работать.

BigInt x = BigInt(1);
BigInt z = x + 5;
z.print();

Это распечатывает 1. Я не уверен, почему z равняется 1, когда это должно быть 6. Я погуглил онлайн и на stackoverflow, но я не мог найти никого больше, который имел проблему точно как это. некоторые были близки, но ответы просто не соответствовали. Любая справка очень ценится!

5
задан 28 February 2010 в 23:34
поделиться

4 ответа

, скорее всего, проблема в операторе + = . Почтовый индекс для него.

3
ответ дан 14 December 2019 в 13:34
поделиться

Вам нужна перегрузка для добавления int в BigInt; константа 5 в вашем примере имеет тип int, а не BigInt. Что-то вроде этого должно сработать:

BigInt operator+(const BigInt lhs, const int rhs)
{
    BigInt returnValue(rhs);
    returnValue += lhs;
    return returnValue;
}

Вам также может понадобиться operator + (const int lhs, const BigInt rhs) .

2
ответ дан 14 December 2019 в 13:34
поделиться

Следующий сверхупрощенный код (минимум, который я могу добавить, чтобы включить весь ваш код и превратить его в действительную автономную исполняемую программу):

#include <iostream>

class BigInt
{
  public:
    BigInt(int i): _i(i) {}
    void print() { std::cout << "BigInt(" << _i << ")\n"; }
    void operator +=(const BigInt rhs) { _i += rhs._i; }
  private:
    int _i;
};

BigInt operator+(const BigInt lhs, const BigInt rhs)
{
    BigInt returnValue(lhs);
    returnValue += rhs;
    return returnValue;
}

int main() {
  BigInt x = BigInt(1);
  BigInt y = BigInt(5);
  BigInt z = x + y;
  z.print();

  BigInt ax = BigInt(1);
  BigInt az = ax + 5;
  az.print();

  return 0;
}

излучает, как предсказуемо:

BigInt(6)
BigInt(6)

Пожалуйста, внесите минимально возможные изменения в этот рабочий код, чтобы воспроизвести обнаруженную вами ошибку - это, конечно же, покажет, в чем именно заключается ваша ошибка.

1
ответ дан 14 December 2019 в 13:34
поделиться

Опубликованный вами код выглядит нормально и должен работать. Проблемы, которые вы видите, почти наверняка связаны с конструктором копирования или оператором присваивания вашего класса BigInt.

0
ответ дан 14 December 2019 в 13:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: