小编Mar*_*ton的帖子

从BaseClass*到DerivedClass的转换无效*

我正在尝试使用工厂方法返回派生类,但返回类型是基类类型.根据我的理解,我认为继承会让我这样做,显然我错了.

WeightExercise和CardioExercise都来自练习.

我可以投射物体,但我认为我的设计意味着我不必这样做.有人可以指出我的错误吗?

主要

ExerciseFactory ExerciseFactoryObj;
WeightExercise *WeightExerciseObj = ExerciseFactoryObj.createExercise(menuselection);
Run Code Online (Sandbox Code Playgroud)

工厂类

class ExerciseFactory
{
public:
ExerciseFactory();
~ExerciseFactory();
Exercise* createExercise(int exercisetype);


private:
static WeightExercise* createWeightExercise() { return new WeightExercise(); }
static CardioExercise* createCardioExercise() { return new CardioExercise(); }
};
Run Code Online (Sandbox Code Playgroud)

工厂实施

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;
}
}
Run Code Online (Sandbox Code Playgroud)

c++ inheritance c++11

3
推荐指数
1
解决办法
3480
查看次数

标签 统计

c++ ×1

c++11 ×1

inheritance ×1