2013-10-12 34 views
0

我有這個類(我知道,可怕..我剛開始使用C++的類和指針類對我越來越難.. :)):指針的樹頭

class Tree{ 
private: 
    Tree* Left; 
    Tree* Right; 
    int info; 
    Tree* GetTree(int num){ 
     return new Tree(num); 
    } 
public: 
    Tree() :info(0) ,Left(nullptr), Right(nullptr) {}; 
    Tree(int num) : info(num), Left(nullptr) , Right(nullptr){}; 
    Tree(int num,Tree* L,Tree* R) : info(num), Left(L), Right(R) {}; 
    void SetLeft(Tree* L){Left = L;}; 
    void SetRight(Tree* R){Right = R;}; 
    void SetLeft(Tree L){Left = &L;}; 
    void SetRight(Tree R){Right = &R;}; 
    void SetLeft(int num){Left = GetTree(num);}; 
    void SetRight(int num){Right = GetTree(num);}; 
    void SetInfo(int num){info = num;}; 
    Tree GetLeft(){return (Left==nullptr) ? Tree() : *Left;}; 
    Tree GetRight(){return (Right==nullptr) ? Tree() : *Right;}; 
    Tree* GetLeft(bool ptr){return Left;}; 
    Tree* GetRight(bool ptr){return Right;}; 
    int GetInfo(){return info;}; 
}; 

(基本上這個類來創建一個樹有2個葉(2種更多的樹木),左,右,和他們每個人都有更多的2個葉等..) 所以我這樣做:

Tree temp(5); 
Tree* tem = &temp; 
temp.SetInfo(10); 
temp.SetLeft(5); 
temp = temp.GetLeft(); 
cout << tem->GetInfo(); 

希望tem會指向樹的頭部,但它只是fol低溫度 .. 有沒有辦法很容易做到這一點?

你們能幫我帶班嗎? 我很難結合指針和類S:

謝謝!

+0

TEM是一個指針到溫度,所以當你改變溫度時,溫度也會指向新的值。 – MRB

+0

那麼我應該怎麼做才能使溫度樹的頭部溫度指向? –

回答

1

希望TEM將指向樹的頭,但它只是按照臨時

當然,它會指向temp,因爲這裏:

Tree* tem = &temp; 

您分配地址爲temp。然後

temp = temp.GetLeft(); 

您更改temp與它的左孩子。但tem仍然指向temp,這就是爲什麼你得到這個結果。

我看不到有任何更改temp與其左孩子的原因。我可以建議你宣佈一個新的變量,並將擁有一個左孩子...

但是首先:

你需要重寫你的類,它有很多錯誤。至少 - 內存泄漏。如果你已經分配(自己)的內存,你必須手動釋放它。

代替它,請使用智能指針,並且不要使用Tree*作爲參數的構造函數。這可能很危險。

所以:

一次全部學習很棒。 但這不起作用

  • 瞭解,如何使用指針(分別從使用類)
  • 瞭解,如何使用類(單獨使用指針)
  • 瞭解指針和類一起
+0

是的,我看到我有一個錯誤.. 即時嘗試創建一棵樹,所以我必須將溫度左右移動,上面給出的例子是我嘗試做的簡短版本。 有沒有一種方法可以創建一個指向樹頂部的指針而不使它跟隨temp? 關於班級,我會在稍後解決,我這樣做是因爲我不知道如何解決一些問題,我會在稍後處理,謝謝! –

+0

順便說一下,我真的學會了如何單獨使用它們,一起使用它們嗎?..是啊..不是我強烈的一面(+我找不到一個好的教程,我的書沒有教導..) –

+0

因爲我已經告訴你,你可以聲明一個新的'Tree'對象,並將它分配給左邊的孩子。然後,你可以單獨使用它。 – soon