Я сделал класс больших чисел. В моей программе меню запрашивает у пользователя, что они хотят делать с любым из трех объектов этого класса, который был создан для них. Один из их вариантов - Фибоначчи, и в этот момент они также должны ввести число и выбрать один из объектов.
Номер входа - это число в последовательности Фибоначчи, и оно помещается в класс 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
В: Каков правильный способ назначения созданного объекта выбранному объекту?
То, что вы пытаетесь сделать, это изменить this
указатель, то есть вы пытаетесь изменить, где this
указано, что является незаконным в C++. Однако вы можете изменить значение поля (ов) объекта, на который this
указывает. Что-то вроде:
this->a = One->a;
... предполагая, что у вас есть поле a
в вашем классе. Затем вы можете сделать это для каждого поля в своем классе. В итоге объект, на который указывает this
объект, будет копией объекта, на который указывает One
.
Более краткий подход:
*this = *One;
... который, семантически означает "установить вещь, что this
указывает на то же значение, что и вещь, что One
указывает. По умолчанию (если вы не переопределен оператор копирования, чтобы сделать что - то еще) для типов классов это означает, что каждый поле в One
будет скопировано в соответствующее поле в this
.
Кроме того, как и в стороне, вы пропускаете множество объектов в этом коде. (Вам нужно delete
объекты, которые вы new
, когда закончите с ними).
*this = *One
? Следует вызвать оператор копирования-назначения.