Пару дней назад я спросил несколько разъяснения по наследованию, концепцию, которую я все еще пытаюсь понять. Вот следующий вопрос, так как я все еще сталкиваюсь с проблемами.
В моем проекте у меня есть 2 типа объектов: рука и лицо, оба наследующие от базового класса BodyPart. BodyPart выглядит примерно так:
class BodyPart
{
public:
typedef boost::shared_ptr<BodyPart> BodyPartPtr;
BodyPart();
virtual ~BodyPart();
private:
int commonMember1;
double commonMember2;
public:
int commonMethod1();
int CommonMethod2();
}
в то время как рука выглядит примерно так:
class Hand : public BodyPart
{
public:
Hand();
~Hand();
private:
int numFingers;
double otherVar;
public:
int getNumFingers();
void printInfo();
}
У меня также есть вектор элементов BodyPart
std::vector<BodyPart::BodyPartPtr> cBodyParts;
состоит из объектов «Рука» или «Голова». В предыдущем вопросе мне сказали, что этот подход имеет смысл, мне просто нужно было преобразовать базовый класс в производный, используя boost static_pointer_cast
Теперь проблема в том, что для некоторых объектов в векторе я не знаю, являются ли они Hand
или Head
, поэтому в какой-то момент в моем коде я могу иметь в cBodyParts
некоторые элементы Hand
, некоторые элементы Head
, а также некоторые BodyPart
элементов. После некоторого дальнейшего анализа я могу правильно классифицировать последний как Hand
или Head
и соответствующим образом изменить элементы в векторе, но я понятия не имею, как это сделать. Должен ли я просто удалить элемент класса case и создать производный элемент с тем же свойством? Должен ли я просто избежать наследования в таком случае?
Заранее спасибо за помощь