在std :: Map中调用派生对象的成员函数

时间:2015-02-19 02:41:05

标签: c++ inheritance

因此,我试图在Map中存储全部来自同一基类的对象,然后从Map中的特定对象调用成员函数。问题是,它调用基类中的函数而不是派生类中的函数。

这是基类:

 #pragma once
 class State
 {
public:
   virtual ~State(){};

   virtual void update(double dt){}
   virtual void render(){}
};

派生类:

    #pragma once
    #include "State.h"

    class State_Splash : public State
    {
    public:
        State_Splash();
        ~State_Splash();

        void update(double dt);
        void render();
    };

包含存储状态对象的Map的类:

标题文件:

    #include "State.h"

    #include <map>
    #include <string>

    class StateManager
    {
    public:
        StateManager();
        ~StateManager();

        std::map<std::string, State> m_StateMap;

    public:
        void AddState(std::string stateId, State state);
    };

实施档案:

    #include "StateManager.h"

    StateManager::StateManager(){}

    StateManager::~StateManager(){}

    void StateManager::AddState(std::string stateId, State state){

        m_StateMap.insert(std::pair<std::string, State>(stateId, state));
    }

最后在主要内容中,我使用了一个StateManager对象,并在其中引用了地图。(我把它剪了一下,只包含了必要的部分)

 int main(int argc, char **argv){

     StateManager stateManager;
     State_Splash _splash;

     stateManager.AddState("splash", _splash);


     stateManager.m_StateMap["splash"].render();//just calls the base class function

0 个答案:

没有答案