2009-02-10 4 views
0

у меня есть 3-х классов в разных файлах:Связь между унаследованными классами

X 
    | 
------- 
|  | 
Y  Z 

Я буду создавать несколько объектов унаследованных классов Y и Z.

специфическая функция в классе Z должны быть выполнены только тогда, когда некоторые флаг переменная задается классом Y.

Где я должен создавать переменную этого флага (какой класс), и каково должно быть объявление (static/extern)?

+0

Не могли бы вы рассказать нам больше о X, Y и Z? Ваше заявление о проблемах ясно, но очень сложно понять, почему только Ys могут установить флаг, который могли читать только Zs. –

ответ

6

Рассмотрите template method как замену для печально известных флагов.

1

Флаг должен быть в Z, если это только Z, который он осуществляет. Но все это пахнет - флаги устанавливаются классами, а не экземплярами. Вместо этого используйте полиморфизм, а не флаги.

1

Я думаю, что это странный дизайн; вы создадите зависимости между унаследованными классами.

Метод (и переменная флаг) должен быть в родительском классе X.

(редактировать) уточнить/заменить то, что я написал выше, переменных может быть в базовом классе, класс Y будет задайте переменную (Setter), а класс Z будет иметь метод, который будет «Получить» значение из базового класса.

0

Лучший ответ: что говорит Антон Гоголев, используйте шаблоны.

(Else использовать приватную переменную перечислимую Используйте, например:. GetType(), который возвращает type.x/type.y и т.д.)

0

Что делать, если у вас есть два объекта Y, и только один установлен флаг? Какое из ваших трех объектов Z затронуто? Вопрос в том, что ваш дизайн испорчен.