2014-01-30 55 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')