2010-03-18 1 views
1

Мы имеем такую ​​ситуацию:Производный класс-компоновщик - это неправильно?

 

        Window Keyboard 
        ^  ^
        |  /
        ApplicationWindow 

так

class Window { } 
class Keyboard { } 
class AppWindow : public Window, public Keyboard { } 

Теперь Keyboard хочет получить доступ к свойству в ApplicationWindow, например, он хочет вызвать в ApplicationWindow в GetWidth() Недвижимость.

Решение у меня есть, чтобы поместить указатель на ApplicationWindow внутри клавиатуры.

Я пытаюсь использовать множественное наследование здесь как composition, в то время как я знаю, что фактический состав более настоятельно рекомендуется, я хотел попробовать MI.

В любом случае я бы нужен обратная ссылка на экземпляр в ApplicationWindow от клавиатуры, если я использовал композицию в любом случае ..

+0

Я бы подумал о пересмотре такого дизайна. Очевидно, вы пытаетесь связать базовый класс с его производными. – AraK

ответ

1

Я бы сказал, это было бы намного чище, чтобы переместить свойство в Клавиатура базового класса.

Приложение ApplicationWindow будет иметь к нему доступ, так как ApplicationWindow расширяет клавиатуру.

Вы не хотите, чтобы базовый класс нуждался в знаниях любых подклассов.

+0

Я думал об этом, и с этой конкретной проблемой это не может быть сделано .. :) Вот почему я включил ИМ в вопрос – bobobobo

+0

ОК. Я предполагаю, что вы говорите, _Keyboard_ просто не должен знать ширину _ApplicationWindow_. Если это так, то с дизайном что-то не так. – bobobobo

+0

да, звучит странно для клавиатуры, чтобы знать о экране, к которому он подключен :). Возможно, у меня есть событие с изменением размера экрана, которое устанавливает ширину клавиатуры или что-то в этом случае, если клавиатуре нужна ширина –

 Смежные вопросы

  • Нет связанных вопросов^_^