gpt4 book ai didi

c++ - 调用派生虚函数

转载 作者:太空狗 更新时间:2023-10-29 21:22:31 24 4
gpt4 key购买 nike

我对 C++ 还是很陌生,继承让我陷入困境。我知道这在 C# 中有效,因为我一直在使用 Base.();

我希望能够调用从实体派生的 PlayerCharacter vector 数组。目前我调用它时,它只调用实体的更新方法。

int main()
{
vector<Entity*> list;
list.push_back(&PlayerCharacter());

for(int i = 0; i < list.size(); i++)
{
list[0]->Update();
}
}

class Entity
{
public:
Entity(void);
~Entity(void);
int hitpoints;
virtual void Update(void);
};
void Entity::Update(void)
{
int a = 0;
a++;
}
class PlayerCharacter : public Entity
{
public:
PlayerCharacter(void);
~PlayerCharacter(void);
bool Move();
void Update() override;
};
void PlayerCharacter::Update(void)
{
int a = 0;
a--;
}

最佳答案

list.push_back(&PlayerCharacter()); 我认为这是您代码中的未定义行为。

在您的情况下,您应该像这样在堆上分配数据:list.push_back( new PlayerCharacter() ); 否则,如果您这样做 &PlayerCharacter() 那么PlayerCharacter 变量将立即被销毁,列表中的指针将指向垃圾字节。

此外,要跟踪哪个函数被调用,您可以使用调试器或从每个 Update 函数在控制台中打印一些内容。

关于c++ - 调用派生虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20372973/

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