2014-04-18 92 views
0

我正在尋找打印類內部的專用鏈接列表的最簡單方法。 (相反順序)以遞歸方式打印鏈接列表C++

我的方法是調用一個插入Head作爲參數的類的函數,並且返回是執行任務的另一個函數。

我這樣做是因爲之前我必須通過Getter函數獲取頭部,然後將其插入到函數調用中。所有這一切都在課外。

void Arreglo::InfoDealer(ofstream &salida) 
{ 
    return InfoDealer_f(Head, salida); 
} 

void Arreglo::InfoDealer_f(NodePTR Ptr, ofstream &salida) 
{ 
    if (Ptr == NULL) 
     return; 
    InfoDealer_f(Ptr->Next, salida); 
    //output stuff 
} 

這是正確的嗎?有一個更好的方法嗎?謝謝。 我是CS新手,請耐心等待。

回答

1

我不太明白你的榜樣,但是,是的,你通常有一個公共的方法(接口)和私人助手方法:

class my_class 
{ 
    public: 
     void print(ostream& out); 

    private: 
     NodePtr _head; 
     void print_helper(NodePtr node, ostream& out); 

} 

void my_class::print(ostream& out){ print_helper(_head, out); } 
+0

謝謝!我也從你的回答中學到了另一件事。我有助手功能公開,它應該是私人的更安全。 :) – emanuel1337

+1

實際上,公共方法應該是流插入器變體的一個免費的朋友函數。 – Deduplicator

+0

@Deduplicator true,應該有一個流插入操作符,但這可能只是'返回p.print(o);'並且有一個公共成員函數。 – clcto

1

那麼,你通常有正確的想法和你的榜樣應該在最後工作。
不過,一些需要考慮的要點:

  • 使用的流插入各種公共友元函數更好的習慣用法:

    inline ostream& operator<<(ostream& o, const myclass& m) { 
        m.print_helper(m._head, o); 
        return o; 
    } 
    // Add in class: 
        friend ostream& operator<<(ostream& o, const myclass& m); 
    
  • 不要隱藏指針的類型定義的後面,它只是掩蓋事物。 NodePTR應該是Node*
+0

也許'NodePTR'是一個'shared_ptr ',在這種情況下,只需鍵入typedef即可。 – clcto

+0

@clcto:這將是容器中的過度抽象,並具有不合理的開銷。 – Deduplicator