Хорошо, я работаю через книгу и пытаюсь изучить перегрузку оператора 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, но я не мог найти никого больше, который имел проблему точно как это. некоторые были близки, но ответы просто не соответствовали. Любая справка очень ценится!
, скорее всего, проблема в операторе + =
. Почтовый индекс для него.
Вам нужна перегрузка для добавления 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)
.
Следующий сверхупрощенный код (минимум, который я могу добавить, чтобы включить весь ваш код и превратить его в действительную автономную исполняемую программу):
#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)
Пожалуйста, внесите минимально возможные изменения в этот рабочий код, чтобы воспроизвести обнаруженную вами ошибку - это, конечно же, покажет, в чем именно заключается ваша ошибка.
Опубликованный вами код выглядит нормально и должен работать. Проблемы, которые вы видите, почти наверняка связаны с конструктором копирования или оператором присваивания вашего класса BigInt.