Итак, пусть у меня есть класс дерева, как это в C++C++ обработки производного класса, который сам себе ссылку
class Node{
void addChild(Node*);
/*obvious stuff*/
protected:
Node* parent;
vector<Node*> children
}
class specialNode : public Node{
void addChild(specialNode*);
/*obvious stuff*/
/*special stuff*/
}
Теперь, когда я получить доступ к детям в specialTree, я, очевидно, получить Node *, не specialNode *.
Но этот specialNode * имеет переменные-члены и функции, которые Node не имеет.
Я могу заставить specialNode принимать специальные значения только как дети и в противном случае ломать время компиляции, , но я все равно получаю Node * при доступе к дочерним/родительским элементам, и я должен использовать его, когда я хочу использовать специальные функции, даже в специальных функциях.
Есть ли какой-нибудь умный или просто лучший способ сделать это? За исключением буквально литья каждый раз?
Ничего себе ... это очень мило. Именно то, что я искал. Спасибо. – jaehoony
Я мог бы отметить, что, сделав это, вы эффективно победили цель наследования - 'SpecialNode' больше не выводится из' Node', вместо этого вы создаете независимые классы с тем же набором переменных-членов. – casablanca
Я тоже собирался указать на это «обращение к наследству» :). Фактически, микширование может использоваться для моделирования ортогональных (сквозных) функций, для которых наследование будет субоптимальным: предположим, что вы хотите организовать автомобили и людей в дереве. Ни автомобили, ни люди не являются «Узлом» (это наследование означает). Использование 'Node' resp. 'Node ' понятие может быть прочитано как «Узел автомобиля» и «Узел человека», который более подходит для этой ситуации. –
MartinStettner