我在覆盖基类的函数时遇到了一些麻烦。
这是我的游戏对象类:
namespace GameEngine {
class GameObject {
public:
virtual void render() {
std::cout << "Render Game Object" << std::endl;
}
};
}
这是我的 Player 类:
class Player : public GameEngine::GameObject {
public:
void render() {
std::cout << "Render Player" << std::endl;
}
};
在 MainComponent.cpp 中,我有一个游戏对象 vector ,我循环遍历它们以渲染它们
Player player;
vector<GameEngine::GameObject> gameObjects;
void MainComponent::init() {
gameObjects.push_back(player);
gameLoop();
}
void MainComponent::render() {
for(int i = 0; i < gameObjects.size(); i++) {
gameObjects[i].render();
}
}
我希望此代码输出“Render Player”,因为 gameObjects vector 中的唯一对象是 Player,但它却输出“Render Game Object”。有没有一种方法可以强制 gameObjects vector 中的 Player 对象使用 Player 渲染而不是 GameObject 渲染?
最佳答案
If a derived class is handled using pointer or reference to the base class, a call to a overridden virtual function would invoke the behavior defined in the derived class.
您必须将指向基类的指针而不是基对象值存储到 vector 中。
Player player;
vector<GameEngine::GameObject*> gameObjects;
void MainComponent::init() {
gameObjects.push_back(&player);
gameLoop();
}
void MainComponent::render() {
for(int i = 0; i < gameObjects.size(); i++) {
gameObjects[i]->render();
}
}
关于c++ - 从基类覆盖函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35381908/