gpt4 book ai didi

C++ VaSTLy 不同的派生类 - 虚拟方法? Actor ?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:48:32 24 4
gpt4 key购买 nike

我有一个类层次结构,在一个基类中有很多共享成员函数,在两个派生类中也有大量独特的成员函数:

    class Scene {
public:
void Display();
void CreateDefaultShapes();
void AddShape(Shape myShape);
// lots more shared member functions
}

Class AnimatedScene : public Scene {
public:
void SetupAnimation();
void ChangeAnimationSpeed(float x, float y);
// lots of member functions unique to animation
}

Class ControllableScene : public Scene {
public:
void ConfigureControls();
void MoveCamera(float x, float y, float z);
void Rotate(float x, float y, float z);
// lots of member functions unique to a controllable scene
}

毫不奇怪,这不起作用:

    Scene myScene;
myScene.SetupAnimation();

这个问题的正确解决方案是什么?我是否应该将所有派生成员函数都虚拟化并将它们添加到基类中?调用 SetupAnimation() 时应该使用强制转换吗?有没有更聪明的设计可以解决这个问题?

注意:我从别处接收到 myScene 并且在实例化它时不能简单地将它声明为 AnimatedScene

编辑:我添加了几个成员函数来说明这一点。一小部分初始化函数绝对适合简单地使用 virtual

最佳答案

  • 您可以转换它,最好使用 static_cast。最不受欢迎的选择。如果你正在类型转换东西,这通常意味着你的设计需要更多的思考
  • 如果您有一个特定的函数/类需要一个或另一个,请将输入声明为您需要的类型,这样可以更准确地传达函数或类的要求
  • 如果函数需要通用,并且这些方法不需要任何输入,那么您可以在父类中定义一个虚方法,比如 init,它在派生类中调用设置实例的正确方法。

关于C++ VaSTLy 不同的派生类 - 虚拟方法? Actor ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33599820/

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