Связь между унаследованными классами - PullRequest
0 голосов
/ 10 февраля 2009

У меня есть 3 класса в разных файлах:

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

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

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

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

Ответы [ 5 ]

6 голосов
/ 10 февраля 2009

Рассмотрим шаблонный метод в качестве замены печально известных флагов.

1 голос
/ 10 февраля 2009

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

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

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

1 голос
/ 10 февраля 2009

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

0 голосов
/ 10 февраля 2009

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

0 голосов
/ 10 февраля 2009

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

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

...