gpt4 book ai didi

c++ - 从基类覆盖函数

转载 作者:行者123 更新时间:2023-11-30 01:11:46 25 4
gpt4 key购买 nike

我在覆盖基类的函数时遇到了一些麻烦。

这是我的游戏对象类:

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/

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