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

标签 c++ inheritance polymorphism virtual

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

    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/

相关文章:

Scala - 在包含未实现变量的 Trait 中使用字符串插值

java - 为什么调用获取父类作为参数的方法,而不调用获取子类作为参数的方法?

C++ 非抽象析构函数继承

java - 如何从多个类继承状态?

java - 如何获得一个类来实现这个gestureRecogniser?

functional-programming - 如何在标准 ML 中打印多态值?

c++ - MSVC 2010 中的 map 宏

c++ - PascalCase vs camelCase 函数?

C++11 线程 - 非静态成员函数的无效使用 - 工作 gcc 5.1.0 损坏的 gcc 7.3.1

c++ - 在结构/C++ 中引用变量