私は数日前に、私がまだ理解しようとしている概念である継承に関するいくつかの説明を求めました。私はまだ問題に直面しているので、これがフォローアップの質問です。
私のプロジェクトでは、Hand と Face の 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();
}
Hand は次のようなものです。
class Hand : public BodyPart
{
public:
Hand();
~Hand();
private:
int numFingers;
double otherVar;
public:
int getNumFingers();
void printInfo();
}
BodyPart 要素のベクトルもあります
std::vector<BodyPart::BodyPartPtr> cBodyParts;
Hand または Head オブジェクトで構成されます。前の質問で、このアプローチは理にかなっていると言われました。ブーストを使用して基本クラスから派生クラスにキャストする必要がありましたstatic_pointer_cast
Hand
さて、問題は、ベクター内のオブジェクトの一部について、それらが であるかであるかがわからないHead
ため、コードのある時点で、cBodyParts
いくつかのHand
要素、いくつかのHead
要素、およびいくつかの要素を使用できることBodyPart
です。さらに分析した後、後者を正しく分類するかHand
、Head
ベクトル内の要素をそれに応じて変更することができますが、それを作成する方法がわかりません。ケース クラス要素を削除して、同じプロパティを持つ派生要素を作成しますか? このような場合は、継承を避けるべきですか?
助けてくれてありがとう