c++有限状态机

c++ Finite State Machine

本文关键字:有限状态机 c++      更新时间:2023-10-16

我收到了一份作业,我似乎无法理解。我们的老师要我们编写一个有限状态机的程序。这是代码

#ifndefine  
#define FINITE_STATE_MACHINE_H
#include <iosfwd>
class FiniteStateMachine
{
Private:
friend std::ostream &operator<< (std::ostream &, FiniteStateMachine const &);
public:
FiniteStateMachine(){}
virtual FiniteStateMachine *changeState() const = 0;
virtual char const *toString() const = 0;
virtual ~FiniteStateMachine(){}
};
class ON : public FiniteStateMachine
{
private:
public:
ON(){}
FiniteStateMachine *changeState() const;
char const *toString() const;
};
class OFF : public FiniteStateMachine
{
private:        
public:
OFF(){ }
FiniteStateMachine *changeState() const;
char const *toString() const;
};
#endif

说明是创建一个包含所有相关成员函数的FiniteStateMachine.cpp文件,以便OFF状态转换为ON状态,反之亦然。

我曾试图编写changeState()函数来返回相反状态的新实例,但它似乎不起作用,我也不确定哪里出了问题。

我试图在FiniteStateMachine.cpp 中实例化并返回一个新的ON对象

FiniteStateMachine *OFF::changeState() const
{
FiniteStateMachine *on = new ON;
return *on;
}

编译器返回以下错误无法在返回中将"FiniteStateMachine"转换为"FiniteStateMachine*">

一位同学建议将其放入构造函数中,而不是简单地调用changeState()

OFF::OFF()
{

FiniteStateMachine *OFF::changeState() const
{
FiniteStateMachine *on = new ON;
return *on;
}
}

编译器返回错误"("标记之前的声明中的限定id

表示它处于changeState和()的之间

在更多的键盘敲击之后,我似乎需要写

FiniteStateMachine *OFF::changeState() const
{
return new OFF();
}

尝试查找"状态模式"。例如https://sourcemaking.com/design_patterns/state

这种设计模式是为了解决您的需求。