gpt4 book ai didi

C++ 继承不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 16:21:23 25 4
gpt4 key购买 nike

我正在制作一个游戏,在游戏中有一个包含玩家的列表,这个列表处理 Player 类。我还有一个类是 Player 的子类,称为 HumanPlayer。我在玩家列表中添加了一个人类玩家。但是当我运行渲染函数时,它不会从 humanplayer 渲染,而是从播放器渲染。渲染函数是一个虚函数,应该被覆盖,但它没有。

这里是我定义列表的地方:

std::list<Player> playerList;

这是我将人类玩家添加到列表的地方:

playerList.push_front(HumanPlayer(512,512,&entityList));

这里是render函数调用render的地方:

if(!playerList.empty()){
std::list<Player>::iterator iter;
for (iter = playerList.begin(); iter != playerList.end(); iter++){
iter -> render(canvas);
}
}

最佳答案

你正在做它所谓的 Slicing .为了使多态性起作用,您需要使用 pointerreference。最基本的解决方案是使用 pointer 代替:

std::list<Player*> playerList;

但现在您需要管理内存并记住删除您创建的所有实例。因此,正如 Collin 建议的那样,您可以使用某种智能指针,例如std::shared_ptr。 .但最终您需要决定哪个对您的问题更有意义。

关于C++ 继承不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16305561/

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