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++中,引用和指针保持多态性。因此,要解决此问题,应创建指针向量:
std::vector< Entity* > entities;
entities.push_back( new Agent( ) );
entities[ 0 ]->update( 5); // Agent::update will be called
std::vector实体;
实体。推回(新代理());
实体[0]->更新(5);//将调用代理::update
另请参见:补充阅读: