Присвоение созданного объекта выбранному объекту

0

Я сделал класс больших чисел. В моей программе меню запрашивает у пользователя, что они хотят делать с любым из трех объектов этого класса, который был создан для них. Один из их вариантов - Фибоначчи, и в этот момент они также должны ввести число и выбрать один из объектов.

Номер входа - это число в последовательности Фибоначчи, и оно помещается в класс Large Number. Я получил все, чтобы работать до сих пор, и он рассчитан до 9999-го числа Фибоначчи, но вот моя проблема:

В классе Large Number используется метод fibonacci, который создает объект Large Number. Теперь я хочу сделать выбранным объектом тот созданный объект.

Ниже мой метод фибоначчи. Я добавил несколько комментариев, чтобы объяснить, что происходит.

    void fibonacci(int n){
        Large *One = new Large(), *Two = new Large();
        One->makeOne(); // initializes the object
        Two->makeOne(); // same here
        Two->first->setnum(1); // sets "Large Number" Two to 1 (One is already 0)

        int current = 0; // counter
        while (current != n){
            Large *Temp = new Large();
            Temp->add(One,Two); // sums One and Two into a temporary Large Number
            One = Two;
            Two = Temp;
            current++;
        }

        this = One; // <-- here is my question
    }

Вы можете верить, что правильный номер создается после завершения цикла while. Но теперь я хочу, чтобы выбранный объект стал созданным числом ("Один").

Этот метод называется чем-то вроде следующего:

Large A = Large();
A.fibonacci(n);

Как бы я сделал A (который был бы this) равным One.

this = One; не работает. error: lvalue required as left operand of assignment

В: Каков правильный способ назначения созданного объекта выбранному объекту?

  • 0
    Вы не можете переназначить этот указатель. Вы должны структурировать свой код иначе. Храните объект в переменной, а не пытайтесь изменить «это»
  • 2
    Как насчет *this = *One ? Следует вызвать оператор копирования-назначения.
Теги:
object
fibonacci

1 ответ

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

То, что вы пытаетесь сделать, это изменить this указатель, то есть вы пытаетесь изменить, где this указано, что является незаконным в C++. Однако вы можете изменить значение поля (ов) объекта, на который this указывает. Что-то вроде:

this->a = One->a;

... предполагая, что у вас есть поле a в вашем классе. Затем вы можете сделать это для каждого поля в своем классе. В итоге объект, на который указывает this объект, будет копией объекта, на который указывает One.

Более краткий подход:

*this = *One;

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

Кроме того, как и в стороне, вы пропускаете множество объектов в этом коде. (Вам нужно delete объекты, которые вы new, когда закончите с ними).

Ещё вопросы

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