我做了一个大数类。在我的程序中,一个菜单询问用户他们想用为他们创建的那个类的三个对象中的任何一个做什么。他们的选项之一是斐波那契数列,此时他们还必须输入一个数字并选择其中一个对象。
输入的数字是斐波那契数列中的数字,被放入Large Number类。到目前为止,我已经完成了所有工作,并且计算了第 9999 个斐波那契数,但这是我的问题:
在大数类中是创建大数对象的 fibonacci 方法。我现在想让所选对象成为创建的对象。
下面是我的斐波那契方法。我添加了一些评论来解释发生了什么。
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;
不起作用。 错误:左值需要作为赋值的左操作数
问:将创建的对象分配给选择的对象的正确方法是什么?
最佳答案
您试图做的是更改this
指针,也就是说,您试图更改this
指向的位置,这在C++ 中是非法的。但是,您可以更改this
指向的对象的字段值。像这样的东西:
this->a = One->a;
...假设您的类(class)中有一些字段a
。然后,您可以为类(class)中的每个字段执行此操作。最后,this
指向的对象将是 One
指向的对象的拷贝。
更简洁的方法是:
*this = *One;
...从语义上讲,这意味着“将 this
指向的东西设置为与 One
指向的东西相同的值。默认情况下(除非你'已经重写了复制操作符以执行其他操作)对于类类型,这意味着 One
中的每个字段都将被复制到 this
中的相应字段。
此外,顺便说一句,您在此代码中泄漏了大量对象分配。 (您需要删除
您新建
的对象,当您用完它们时。)
关于c++ - 将创建的对象分配给选定的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21464521/