c++ - 策略设计模式 - 用对象填充 C++ 类

标签 c++ constructor strategy-pattern

我正在尝试用 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)
                               ^

所以我的问题是...

CookingContextstrategy 对象填充,实例化 ICookingStrategy 的任一子对象的最佳方法是什么?

(尝试了很多不同的,但没能成功)

最佳答案

运行时多态性适用于引用指针,而不适用于对象。在这里,您在构造函数中为 抽象类 使用了按值传递。您不能创建抽象类的对象。这就是编译器提示的原因!

关于c++ - 策略设计模式 - 用对象填充 C++ 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21542112/

相关文章:

c++ - 变量模板的显式特化

c++ - 奇怪的迭代器行为

c++调用类的构造函数

java - 在我的 Activity 类中使用构造函数有意义吗?

c++ - 从空指针初始化类/结构

objective-c - 如何在 Objective-C 中创建策略模式?

c++ - 在 ros cmake 文件中包含 dlib

java - 与基类构造函数相比,什么时候调用 Java 隐式构造函数?

design-patterns - 策略模式和依赖注入(inject)有什么区别?

java - 如何用spring高效的实现一个策略模式?