Название: Декоратор и доступ к полям класса Отправлено: billygates от Января 27, 2010, 14:12 Что-то туплю с созданием декоратора. Нужно, чтобы работал сценарий, описанный в main(). Ошибка, выдаваемая gcc -- очевидна и вполне логична (за исключением того, что friend не срабатывает). Как достичь желаемого? Спасибо.
P.S. Одно из условий, нужно, чтобы Base не знал о своих дочерних классах. Код: decorator.cxx: In member function ‘virtual void DecoratedBase::doSomething()’: Код
Название: Re: Декоратор и доступ к полям класса Отправлено: Barmaglodd от Января 27, 2010, 14:48 Вроде friend не наследуется. Сейчас у Страуструпа спрошу.
Название: Re: Декоратор и доступ к полям класса Отправлено: Barmaglodd от Января 27, 2010, 14:50 Бъерн говорит : "Дружба не наследуется и не транзитивна.".
Название: Re: Декоратор и доступ к полям класса Отправлено: ildar от Января 27, 2010, 15:17 тем не менее, Decorator будет иметь доступ к наследникам Base
но в первоначальном примере это не поможет имхо идея декоратора используется не правильно Название: Re: Декоратор и доступ к полям класса Отправлено: billygates от Января 27, 2010, 15:21 Цитировать Бъерн говорит : "Дружба не наследуется и не транзитивна.". да-да, все верно.но в первоначальном примере это не поможет не уточните, пожалуйста, что здесь неправильно? Подозреваю неправильно, что меняю значения полей -- в настоящем сценарии, мне их менять не надо, просто надо изменить поведение функции doSomething(), при этом имея доступ на чтение к полям Base. И вопрос, увы, все еще актуален.имхо идея декоратора используется не правильно Название: Re: Декоратор и доступ к полям класса Отправлено: ildar от Января 27, 2010, 15:53 вроде как идея состоит в том, что все объекты цепочки декораторов должны иметь одинаковый интерфейс, т.к. в общем случае каждый из этих объектов не знает кого он декорирует и кем будет декорирован.
имхо нужно объявить интерфейс для доступа к интересующим данным вместо дружбы. |