C++ 多级继承不起作用

c++ multilevel inheritance not working

本文关键字:不起作用 继承 多级 C++      更新时间:2023-10-16

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

实体 -> 项目符号、代理

特工 ->玩家,敌人

敌人 -> 基本敌人

在每一个中,我都有一个"更新"功能

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++,如果您将Agent对象转换为Entity对象,则会丢失有关Agent的所有信息,并且新对象将是一个真正的Entity。即你失去了多态行为。

当您创建包含Entity对象的矢量并在其中推送和Agent对象时,就会发生这种情况,因为存储的对象将是纯Entity对象。

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

std::vector< Entity* > entities;
entities.push_back( new Agent( ) );
entities[ 0 ]->update( 5); // Agent::update will be called