C++ 多级继承不起作用
c++ multilevel inheritance not working
我似乎无法让多级继承函数调用正常工作。对于我的结构,我有一个"实体"作为主要的超类,然后
实体 -> 项目符号、代理
特工 ->玩家,敌人
敌人 -> 基本敌人
在每一个中,我都有一个"更新"功能
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
相关文章:
- 为什么在保护模式下继承升级不起作用
- 将复制构造函数设置为默认值在继承自 QObject 时不起作用
- 带有此指针的模板类多重继承构造函数不起作用?
- 我的二传手在新类中不起作用(继承)
- GCC:当层次结构中存在虚拟继承时,C++11 内联对象初始化(使用 "this")不起作用
- 为什么多个头文件和源文件中的C++继承不起作用?
- C++ 多级继承不起作用
- C++,继承的复制因子不起作用
- C++为什么继承不起作用
- 在C++中实现方法时继承不起作用
- .cpp.模板类继承不起作用
- 似乎头文件被忽略了/继承平原不起作用
- C++继承在堆栈上不起作用
- 使用继承时,带有 CRTP 的类型定义不起作用
- 类继承代码不起作用
- C++11构造函数继承不起作用
- c++中的继承不起作用.编译以下c++代码时发生链接器错误
- 使用模板时,继承不起作用
- 派生类的继承方法不起作用
- 具有继承的重载方法/运算符不起作用