我試圖使用工廠方法來返回派生類,但返回類型是基類類型。根據我的理解,我認爲繼承可以讓我做到這一點,顯然我錯了。無效從BaseClass *轉換爲DerivedClass *
WeightExercise和CardioExercise都來自練習。
我可以拋出物體,但我認爲我的設計意味着我不必這樣做。有人能指出我的錯誤嗎?
主要
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;
}
}
您正在將返回值分配給派生類。你必須將它分配給BaseClass * – MBen