Показать сообщение отдельно
Старый 25.11.2009, 19:33   #3
wolfhound512
Знающий
 
Аватар для wolfhound512
 
Регистрация: 18.02.2008
Сообщений: 276
Написано 121 полезных сообщений
(для 299 пользователей)
Ответ: Виртуальное наследование

Почему перемудрил? Есть у меня "элементы" основанные на базовом классе. Эти элементы могут быть первичными (cPrimary), а могут и не быть. Если элемент является первичным, то можно пользоваться дополнительными функциями, + две функции работают по-другому. Вроде бы ничего мудреного.
Вставить же такое разделение сразу после базового класса (т.е. все обычные от базы, а все первичные от базы+primary) нельзя, так как элемент может стать первичным только аж в четвертом покалении.
Изначально я пошел по третьему пути, не задумываясь над тем, что можно сделать иначе. Поэтому в базовом классе есть переменная, отвечающая за статус элемента. Т.е. во всех специфических функциях идет проверка: является ли элемент первичным. Минусы этого способа я описал выше.

Что за буферные конструкторы?
У меня проблема такая:
cBase (virtual)-> cElem1 -> cElem2 -> cElem3

Т.к. cBase наследовался виртуально, то в cElem3 нужно вызвать его конструктор. Допустим cElem3 знает все аргументы необходимые базе, но подразумевается, что он должен передать их cElem2, который может их изменить или проигнорировать и передать дальше свои аргументы. А так как вызывать конструктор базы приходится прямо из cElem3, то эта цепочка обламывается.
Как ты это обошел?
__________________
GUI, GUIw512, AlbaLynx, Форум
(Offline)
 
Ответить с цитированием