Далее хотел бы написать красно-черное дерево с помощью наследования. Напомню, что красно-черное дерево отличается от обычного наличием дополнительного поля класса - цвета узла.(опустим пока балансировку)
Наследование нужно лишь для проектирования, т.е., говоря проще, для придания коду гибкости с целью предусмотрения возможных изменений в ТЗ. Для заведомо однозначных, давно проработанных мат.моделей (таких как деревья) в этом нет ни малейшего смысла, и ни всякое там наследование классов, ни какие более высокоуровневые механизмы не нужны - можно и на Фортране написать.
Так что лучше напиши на Си, и, если очень хочется, оберни в класс как в синтаксический сахар. Не порть код наследованием - его потом незабайндишь никуда.
Если же ты хочешь изучать методологии проектирования, то худший контекст, в котором их можно познавать и отрабатывать - это как раз язык уродливый язык Algol with Classes (к числу диалектов которого принадлежит и С++) - так что не советую углубляться в этом направлении. Одно дело - трахаться с ним из-за legacy code, и совсем другое - полагать, что именно это и представляет собой объективную сложность программирования. В последнем случае за несколько лет опыта формируется ничем не исправимый алголовский формат мышления, несчастные инвалиды умственного труда так везде по-алголовски и пишут.
-- Пн окт 25, 2010 10:20:29 --как в классе узнать свой собственный тип?
Проще сразу отказаться от С++ как от заведомо ущербной технологии и взять язык с другой семантикой - там таких вопросов просто не возникнет. А если это будет ещё и язык динамический, то можно будет не то, что программно прочитать тип, а даже изменить его в рантайме.
В принципе, есть методы героического преодоления самостоятельно созданных себе трудностей - они называются пафосным термином "паттерны проектирования", но опять же, прежде чем калечить себе формат мышления подобными вещами, лучше разобраться хорошенько в программировании, разложить всё по причинно-следственным связям - тогда сразу станут ясны не только все подводные камни, об которые можно поранить ноги при использовании в подобных ситуациях С++, но и более-менее вменяемые способы эти камни обходить.
-- Пн окт 25, 2010 10:55:49 --Это совсем другой вопрос, изначально причина была такая:"О! прикольно, элементами дерева являются деревья!!!"
Но потом стало понятно, что так очень удобно работать с поддеревьями - все методы, доступные для дерева, доступны и для любого его поддерева. Это просто Супер_Удобно!
А так же издевательство над принципами ООП.
Деревья к ООП не имеют ни малейшего отношения - это типичный ADT. Деревья можно реализовывать на ОО-языках, но от того, что ты обернёшь не-объектную модель в объект, ты ООП как таковое не получишь. Программа на Си, обёрнутая целиком в один-единственный класс - это ещё не С++-программа, и уж тем более не объектное моделирование.