我制作了一大类。在我的程序中,菜单会询问用户他们想要为该类创建的三个对象中的任何一个做什么。他们的一个选择是Fibonacci,此时他们还必须输入一个数字并选择其中一个对象。
输入数字是Fibonacci序列中的数字,它被放入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 :(得分:3)
您要做的是更改this
指针,也就是说,您尝试更改this
指向的位置,这在C ++中是非法的。但是,可以更改this
指向的对象的字段的值。类似的东西:
this->a = One->a;
...假设您的班级中有一些字段a
。然后,您可以为班级中的每个字段执行此操作。最后,this
指向的对象将是One
指向的对象的副本。
更简洁的方法是:
*this = *One;
...在语义上,它意味着“设置this
指向与One
指向的内容相同的值。默认情况下(除非您已将复制运算符重写为为类类别执行其他操作)这意味着One
中的每个字段都将复制到this
中的相应字段。
另外,另外,您在此代码中泄漏了大量对象分配。 (当你完成它们时,你需要delete
个new
个对象。)