C++ c++;多级继承不起作用

C++ c++;多级继承不起作用,c++,inheritance,C++,Inheritance,我似乎无法使多级继承函数调用正常工作。对于我的结构,我有一个“实体”作为主要的超类 实体->项目符号,代理 代理->玩家,敌人 敌人->基础 在每一项中,我都有一个“更新”功能 class Entity { public: Entity(); virtual ~Entity(); //stuff virtual Bullet update(float deltaTime); } class Agent : public Entity { public:

我似乎无法使多级继承函数调用正常工作。对于我的结构,我有一个“实体”作为主要的超类

实体->项目符号,代理

代理->玩家,敌人

敌人->基础

在每一项中,我都有一个“更新”功能

class Entity
{
public:
    Entity();
    virtual ~Entity();
    //stuff
    virtual Bullet update(float deltaTime);
 }


class Agent : public Entity
{
public:
    Agent();
    virtual ~Agent();

    virtual Bullet update(float deltaTime);

class Player : public Agent
{
public:
    Player();
    ~Player();

    Bullet update(float deltaTime) override;

class Enemy : public Agent
{
public:
    Enemy();
    virtual ~Enemy();

    virtual Bullet update(float deltaTime);

class BasicEnemy : public Enemy
{
public:
    BasicEnemy();
    ~BasicEnemy();

    Bullet update(float deltaTime) override;
我创建玩家、敌人和子弹对象,然后在我调用时将它们传递到实体向量中

Entity entity = entities[i];
entity.update(deltaTime);
它只进入“代理”更新函数,如果我将代理更新函数设置为纯虚拟,它只进入实体更新函数,为什么玩家和敌人的更新函数不覆盖基本函数?

这是因为你将对象存储在向量中。您应该存储对象的指针

详情: 在C++中,如果将<代码>代理> /Cord>对象映射到<代码>实体< /C>对象,则将关于<代码>代理> />代码的所有信息全部松开,新对象将是真正的实体< /C>。也就是说,你失去了多态性行为

当您使用
实体
对象创建一个向量并在其中推送和
代理
对象时,会发生这种情况,因为存储的对象将是纯
实体
对象

在C++中,引用和指针保持多态性。因此,要解决此问题,应创建指针向量:

std::vector< Entity* > entities;
entities.push_back( new Agent( ) );
entities[ 0 ]->update( 5); // Agent::update will be called
std::vector实体;
实体。推回(新代理());
实体[0]->更新(5);//将调用代理::update
另请参见:补充阅读: