2014-01-30 53 views
0

我做了一个大数字类。在我的程序中,菜单向用户询问他们想要如何处理该类中为它们创建的三个对象中的任何一个。他们的选择之一是斐波那契,在这一点上,他们也必须输入一个数字并选择其中一个对象。将创建的对象分配给选定的对象

输入数字是Fibonacci序列中的数字,它被放入Large Number类中。到目前为止,我已经完成了所有工作,并计算出了第9999个斐波那契数,但这里是我的问题:

大数字类是创建大数字对象的斐波那契方法。我现在想让所选对象成为创建的对象。

以下是我的斐波纳契方法。我添加了一些评论来解释发生了什么。

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循环结束后会创建正确的数字。但是现在我希望所选对象成为创建的数字(“One”)。

的方法被称为在类似如下的事:

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

我怎么会让A(这将是this)等于One

this = One;不起作用。 error: lvalue required as left operand of assignment

问:将创建的对象分配给所选对象的正确方法是什么?

+0

你不能重新分配这个指针。你需要构建不同的代码。将对象存储在一个变量中,而不是试图改变“this” – Nabren

+2

* * this = * One'?它应该调用复制赋值操作符。 – 0x499602D2

回答

3

你要做的是改变this指针,也就是说,你正在尝试改变this点,这在C++中是非法的。您可以可以,但是,更改this指向的对象的字段的值(s)。喜欢的东西:

this->a = One->a; 

...假设你有你的类的一些领域a。然后,您可以为班级中的每个字段执行此操作。最后,由this指向的对象将是由One指向的对象的副本。

一个更简洁的方法是:

*this = *One; 

...其中,语义,意思是“设置件事this指向相同的值东西One点默认情况下(除非你。这意味着One中的每个字段将被复制到this中的对应字段中。

另外,顺便说一句,您正在泄漏大量的对象分配此代码(您需要delete ob当你完成它时,你已经编辑了new')