gpt4 book ai didi

c++ - 如何从子 B 创建子 A 并转换为父?

转载 作者:行者123 更新时间:2023-11-28 04:09:07 24 4
gpt4 key购买 nike

<分区>

上下文:我想在我的程序中使用状态对象来确定程序在某个状态下的运行方式。我有一个抽象类 State,每个状态都派生自它(为了简单起见,假设我们有 MenuStateAboutState),当前状态是存储为 State 类型。

我希望能够从 MenuState 中创建一个新的 AboutState 实例,反之亦然,这样我就可以控制我当前所处的程序状态并更改状态很容易(这将返回一个 State 对象,因为这是我当前的状态类型)

我遇到的问题显然是,如果我首先创建 AboutStateMenuState 尚不存在(对编译器而言)并在编译时崩溃。我想通过向前声明 MenuState 来解决这个问题,但是我不能在函数中强制转换 MenuState 因为我只是向前声明它而不是创建一个完整的类。

本质上,我如何转发声明/修复这个循环引用问题,以便我可以从另一个对象创建每个对象?

我主要使用 Java,所以请原谅下面的明显错误,但你明白了,即使我转发声明,我也无法转换 temp -> IWorldState。 (我认为)

class AboutState : public IWorldState
{
public:
AboutState() {};
virtual IWorldState* handleInput(std::string input) {
MainMenuState temp;
*IWorldState state = (IWorldState)temp;
return state;
}
};

class MainMenuState : public IWorldState
{
public:
MainMenuState() {};
virtual IWorldState* handleInput(std::string input) {
AboutState temp;
*IWorldState state = (IWorldState)temp;
return state;
}
};

也不知道问同一个问题是否可以,但是是否有更合适的方法来对对象执行这种功能,或者是否有不同类型的方法在不同状态之间移动?我考虑过在开始时创建所有状态并将下一个状态作为参数传递给构造函数的想法,但我觉得如果我能让它工作就没有必要了。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com