私は継承の概念に慣れておらず、次の問題の解決策を見つけるのに苦労しています。
頭と手の2つのクラスがあります。これらのクラスのインスタンスは、主にベクトルの要素として使用します。2 つのクラスには、共通のメソッドとそれらに固有のメソッドがあります。
さらに、オブジェクトの共有ポインターを扱います。
これを実装する最善の方法は、このように BodyPart クラスを作成することだと思いました
class BodyPart
{
public:
typedef boost::shared_ptr<BodyPart> pointer;
private:
int commonMember1;
double commonMember2;
public:
int commonMethod1();
int CommonMethod2();
}
そして、このような2つの派生クラス
class Hand : public BodyPart
{
public:
typedef boost::shared_ptr<Hand> pointer;
private:
int numFingers;
public:
int getNumFingers();
void printInfo();
}
最後に、BodyPart 要素のベクトルを宣言したいと思います。
std::vector<BodyPart::pointer> cBodyParts;
Hand または Head 要素のいずれかを含み、必要に応じてベクター要素でメソッドを呼び出します。
しかし、このアプローチはあまりうまく機能していないようです。どうやら、ベクトルの要素を取得しようとすると、コンパイラは、BodyPart 共有ポインターから Hand 共有ポインターに変換できないと文句を言います。さらに、ベクトルが上記のように宣言されている場合、その要素で派生クラスに固有のメソッド ( getNumFinger() など) を呼び出すことはできません (実際にはそのクラスからのものであっても)。
これに対処する適切な方法はありますか?それとも私のアプローチは完全に間違っていますか?前もって感謝します!