Когда я должен продолжать создавать производные классы, и когда я должен просто добавить условные выражения в мой код?
например для ракеты
class Object;
class Projectile : public Object;
class Missile : public Projectile;
class MissileGuided : public Missile;
Или я должен внедрить последний в код ракеты?
void Missile::Update()
{
if(homing && ObjectExists(Target))
TurnTowards(Target.Pos)
Pos += Motion;
}
Я думаю, что для всех мельчайших деталей вторая лучше, потому что вы начинаете получать комбинации вещей (например, некоторые ракеты могут не отображаться на радаре, некоторые могут быть разрушаемыми, некоторые могут получить новые цели, если оригинал уничтожен или находится вне зоны действия и т. д.)
Однако тогда то же самое можно сказать и о обычных снарядах, обладающих свойствами ракет в некоторых случаях (например, могут быть разрушаемыми, большие снаряды могут отображаться на радаре и т. Д.)
А потом я мог бы сказать, что снаряды имеют общие свойства с кораблями (оба двигаются, при столкновении они наносят урон, могут показываться на радаре, могут быть разрушаемы ...)
И тогда все заканчивается как 3 класса:
class Entity;
class Object : public Entity;
class Effect : public Entity;
Где целесообразно провести черту между созданием производных классов и реализацией функций метода с флагами или чем-то еще?