2013-05-16 3 views
1

вопрос может быть немного неясно, так что я просто приведу код:Должен ли я наследовать подкласс, если в некоторых экземплярах не используется атрибут базового класса?

class HitPoints { 
    int m_current; 
    int m_maximum; 
    int m_regeneration; 
}; 

Так в основном current означает хитпоинты вы в настоящее время есть, maximum это максимальные очки вы можете иметь, и regeneration является сколько hp вы получаете каждые 10 секунд.

Теперь дело; не каждое существо в моей игре использует regeneration для регенерации своего hp, некоторые просто не могут регенерировать hp с течением времени.

Должен ли я просто установить regeneration в 0 для этих существ, или я должен наследовать новый класс:

class HitPoints { 
    int m_current; 
    int m_maximum; 
}; 

class RegeneratingHitPoints : public HitPoints { 
    int m_regeneration; 
}; 

Я думаю, что это не имеет значения, что многое для этого небольшого примера, но используя знания I» я узнал, я должен наследовать новый класс.

Вопрос, действительно ли это имеет значение для одного атрибута? И чтобы сделать его более общим вопросом, насколько строго он создает новые классы? Могу ли я иногда просто «согнуть» немного и использовать старый класс, даже если я должен наследовать новый?

+1

Не стоит отвечать, но я бы просто сделал его равным нулю. – MikeTheLiar

+2

Согласовано - легко обернуть вокруг оси по классу. Что-то сказать просто. –

ответ

0

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

+0

Просто быстрый комментарий. То, что вы сказали, верно для 99,9% времени. Однако в режиме реального времени или во встроенных системах, где производительность или память вызывают озабоченность, предпочтительной является первая альтернатива (только один класс). – Pedrom

+1

@Pedrom Нет, аргументы для иерархии здесь в лучшем случае слабы. –

5

Если хранилище этого дополнительного объекта не станет проблемой (если бы у вас было много существ в памяти сразу), я бы не создал совершенно новый класс, чтобы избавиться от него. На мой взгляд, если вы не восстанавливаете точки попадания, ваша регенерация точки удара равна нулю.

+0

У меня может быть до 500 существ одновременно ... И ваш последний аргумент был ужасен, с этой логикой у вас мог быть только один класс в вашей программе со всеми атрибутами каждого объекта и установить их в ноль. Если вы не используете ману, вы получите 0 маны. Если вы не можете двигаться, вы получите 0 скорости движения. Если вы не используете заклинания, ваш 'vector ' -vector пуст. –

+1

Когда я имел в виду «много», я имею в виду десять или двадцать миллионов. И да, есть точка, в которой вы слишком абстрактны - но это не тот момент. По крайней мере, по моему мнению. Если бы вы всегда получали супер-специфику, вы могли бы утверждать, что у вас есть RegeneratingHitPoints, SlowlyRegeneratingHitPoints, FastRegenerationHitPoints и т. Д., Но это ваше решение, где эта точка слишком много наследования. – SubSevn

+0

Нет, у вас не было бы 'SlowlyRegeneratingHitPoints' и' FastRegeneratingHitPoits' будут иметь одинаковые атрибуты, только с разными значениями. 'RegeneratingHitPoints' против' HitPoints' - это тот, где одному из них не нужен атрибут «регенерация». –

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