ファクトリ メソッドを使用して派生クラスを返そうとしていますが、戻り値の型は基本クラスの型です。私の理解では、継承によってこれが可能になると思っていましたが、明らかに間違っています。
WeightExercise と CardioExercise は、どちらも Exercise から派生したものです。
オブジェクトをキャストすることはできましたが、私のデザインではそうする必要はないと考えていました。誰かが私の間違いを指摘できますか?
主要
ExerciseFactory ExerciseFactoryObj;
WeightExercise *WeightExerciseObj = ExerciseFactoryObj.createExercise(menuselection);
ファクトリークラス
class ExerciseFactory
{
public:
ExerciseFactory();
~ExerciseFactory();
Exercise* createExercise(int exercisetype);
private:
static WeightExercise* createWeightExercise() { return new WeightExercise(); }
static CardioExercise* createCardioExercise() { return new CardioExercise(); }
};
工場実装
Exercise* ExerciseFactory::createExercise(int exercisetype)
{
if ( 1 == exercisetype )
{
return this->createWeightExercise();
}
else if ( 2 == exercisetype )
{
return this->createCardioExercise();
}
else
{
cout << "Error: No exercise type match" << endl;
}
}