Я хочу создать узловой класс, который затем можно использовать для различных типов деревьев, но я сталкиваюсь с трудностями, когда пытаюсь обдумать, как это сделать, чтобы не создавать ненужные поля. Например, у меня есть следующий класс:
class Node {
protected:
Node *left;
Node *right;
}
Этот класс будет иметь методы, которые будут иметь дело с получением и установкой левого и правого соединений узла. Но тогда у меня также будет следующий класс:
class BinaryNode : public Node {
protected:
BinaryNode *left_child;
BinaryNode *right_child;
BinaryNode *parent;
}
Помимо нового родительского соединения, левый и правый дочерние узлы можно описать с помощью левого и правого соединений из базового класса, но я могу не используйте их, потому что они не являются двоичными узлами. Есть ли подходящий способ заставить их вести себя так, как я хочу?
Мне также пришло в голову, что это может не стоить усилий и что мне все равно следует создавать новые поля, чтобы я меня не заставляют таскать иногда неинтуитивные имена и подозрительный кастинг. Я был бы рад узнать об этой мысли.