我正在尝试用 C++ 实现策略设计模式。
我有一个没有非抽象方法的抽象类,称为 ICookingStrategy:
class ICookingStrategy
{
public:
virtual int cook() = 0;
};
从这个抽象类继承两个子类:fastCooking 和 slowCooking:
子类
class fastCooking : public ICookingStrategy
{
public:
int cook() { return 0; }
};
class slowCooking : public ICookingStrategy
{
public:
int cook() { return 0; }
};
上下文类
重点是,我希望另一个类由实例化 fastCooking 或 slowCooking 的对象填充,无差别。这意味着,一个实例化 ICookingStrategy 的对象。
但我的问题是:我找不到如何填充这个接收类。我考虑了构造函数的参数,但是当我尝试这个时,g++ 给我一个错误:
class CookingContext
{
public:
CookingContext (ICookingStrategy* cookingStrategy):cookingStrategy(cookingStrategy)
{}
int cook()
{
this->cookingStrategy.cook();
return 0;
}
private:
ICookingStrategy* cookingStrategy;
};
在 main()
中,我想实例化两个子类之一,然后像这样填充 CookingContext
:
int main(void)
{
ICookingStrategy* cookingStrategy;
cookingStrategy = new fastCooking;
CookingContext cooking(cookingStrategy);
cooking.cook();
return 0;
}
编译时的 G++ 错误消息是:
error: expected ‘)’ before ‘*’ token
CookingContext(ICookingStrategy* cookingMode):cookingMode(cookingMode)
^
所以我的问题是...
让 CookingContext
被 strategy
对象填充,实例化 ICookingStrategy
的任一子对象的最佳方法是什么?
(尝试了很多不同的,但没能成功)
最佳答案
运行时多态性适用于引用
和指针
,而不适用于对象
。在这里,您在构造函数中为 抽象类
使用了按值传递
。您不能创建抽象类的对象。这就是编译器提示的原因!
关于c++ - 策略设计模式 - 用对象填充 C++ 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21542112/