1
我使用composite pattern來實現樹結構。它有3個類:節點(基類),葉子(沒有子類)和分支(有子類)。我有一些常見的數據放在樹節點中,比如根。常見數據的一個例子是米或公里的單位選擇。應該訪問所有節點的公共數據。如何實現它?將公共數據的指針放在所有節點上看起來沒有記憶效率。如何在樹結構中獲取ansestor的屬性?
我使用composite pattern來實現樹結構。它有3個類:節點(基類),葉子(沒有子類)和分支(有子類)。我有一些常見的數據放在樹節點中,比如根。常見數據的一個例子是米或公里的單位選擇。應該訪問所有節點的公共數據。如何實現它?將公共數據的指針放在所有節點上看起來沒有記憶效率。如何在樹結構中獲取ansestor的屬性?
這樣做的一種方法是爲樹添加一個單獨的類,將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) {}
...
};