Как получить атрибут предка в древовидной структуре?

я использую составной шаблон реализовать древовидную структуру. Он имеет 3 класса: узел (базовый класс), лист (без дочернего класса) и ветвь (с дочерним классом). И у меня есть некоторые общие данные, помещенные в узел дерева, например корень. Пример общих данных — выбор единицы измерения метра или километра. Общие данные должны быть доступны для всех узлов. Как это реализовать? Размещение указателя общих данных на всех узлах, похоже, не эффективно для памяти.

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) {}
...
};
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector