因此,我试图在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