【问题标题】:c++ multilevel inheritance not working [duplicate]c ++多级继承不起作用[重复]
【发布时间】:2016-12-31 17:34:33
【问题描述】:

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

实体 -> 子弹,特工

代理 -> 玩家,敌人

敌人 -> 基本敌人

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

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++ inheritance


    【解决方案1】:

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

    详情: 在 C++ 中,如果您将 Agent object 转换为 Entity object,您将丢失有关 Agent 的所有信息,并且新对象将是真正的 @987654326 @。 IE。你失去了多态行为。

    当您创建一个带有Entity 对象的向量并在其中推送和Agent 对象时会发生这种情况,因为存储的对象将是纯Entity 对象。

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

    std::vector< Entity* > entities;
    entities.push_back( new Agent( ) );
    entities[ 0 ]->update( 5); // Agent::update will be called
    
    猜你喜欢
    • 2016-08-28
    • 2016-03-10
    • 1970-01-01
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多