2013-10-13 34 views
1

我使用composite pattern來實現樹結構。它有3個類:節點(基類),葉子(沒有子類)和分支(有子類)。我有一些常見的數據放在樹節點中,比如根。常見數據的一個例子是米或公里的單位選擇。應該訪問所有節點的公共數據。如何實現它?將公共數據的指針放在所有節點上看起來沒有記憶效率。如何在樹結構中獲取ansestor的屬性?

回答

1

這樣做的一種方法是爲樹添加一個單獨的類,將root指針放在那裏,並在其中添加所有常用項目。然後,tree指針添加到node基類,並添加一個構造函數參數傳遞給樹的所有節點重新指向他們的tree對象:

class node; 
class tree { 
    node *root; 
    int multiplier; // e.g. 1000 for meters, 1 for kilometers 
} 
class node { 
protected: 
    tree *owner; 
    node *parent; // parent is NULL for the root 
    node(tree *_owner, node *_parent) : owner(_owner), parent(_parent) {} 
}; 
class branch : public node { 
    list<node> children; 
public: 
    branch(tree *_owner, node *_parent) : node(_owner, _parent) {} 
    ... 
};