Общие методы производного класса - PullRequest
0 голосов
/ 03 ноября 2010

У меня есть функция, которую используют 2 производных класса, но третий - нет, имеет ли смысл просто оставить ее в базовом классе, даже если один из 3 производных классов ее не использует?

Единственный способ, которым я мог бы подумать о запрете третьего класса, - это в основном создать промежуточный класс, производный от базового, тогда 2, которые используют общую функцию, выводятся из второго класса.

Можно ли запретить третьему классу использовать функцию, позволяя двум, которые должны ее использовать, использовать ее?

Это просто кажется слишком сложным, я имею в виду, пока я не "пытаюсь" вызвать функцию из 3-го класса, это не должно быть проблемой, мне просто было интересно, есть ли способ предотвратить все это вместе без особых хлопот.

Ответы [ 2 ]

3 голосов
/ 03 ноября 2010

Нет способа сделать это напрямую.По сути, когда вы подкласс, вы говорите, что подкласс - это более конкретная версия базового класса.

В этом случае вы пытаетесь сказать, что «подкласс - это более специфическая версия базового класса., except for the fact that it shouldn't be able to touch XXX ".По сути, это нарушает принцип подстановки Лискова .

. Лучший способ справиться с этим - добавить второй базовый класс в вашу иерархию, что, я считаю, является решением, которое вы упоминаете.

По сути, составьте иерархию:

base
 | \----   subclass without feature available
 |
 \--base+feature
       \--subclass one with specific feature
       \--subclass two with specific feature
0 голосов
/ 03 ноября 2010

Вы можете сделать эту функцию виртуальной.Затем переопределите функцию в 3-м классе и сгенерируйте исключение.Это помешает разработчикам использовать функцию в 3-м классе.

...