C ++创建两个独立抽象类

时间:2018-05-16 22:05:27

标签: c++ class inheritance

这可能是一个愚蠢的问题,但无论如何我不得不问。我有2个单独的抽象类:字符敌人野蛮人死灵法师来自字符 Skeleton Devil 来自< strong> Enemy。我的问题是我可以创建角色敌人的派生数组。我可以创建另一个类,让我们这样说实体

class Entity : public Character, public Enemy {};

然后我会创建一个指向 Enemy 的指针数组。

我能以某种方式这样做:

Entity* p = new Barbarian;

如果这是可能的,我想我需要一个虚拟析构函数。我该如何定义?

编辑:我的一个愚蠢的错误,继承应该是另一种方式,问题是它可以这样做吗?

3 个答案:

答案 0 :(得分:6)

反过来说。您应该创建一个Entity抽象类。角色和敌人应该继承实体类。

class Character : public Entity

class Enemy : public Entity

你提到的其他一切都很好。您需要创建一个Entity类的Array,对于每个Entity,您可以说ent = new Barbarian()或类似的东西。

答案 1 :(得分:3)

不,你不能这样做。随着

class Entity : public Character, public Enemy {}

Entity同时始终是CharacterEnemy,但它不能是Barbarian之类的子类中的一个(或多个)。

所以Entity* p = new Barbarian;无效。

要实现您的目标,请将Entity作为CharacterEnemy的公共基类:

class Entity {};
class Character : public Entity {};
class Barbarian : public Character {};
...
class Enemy : public Entity {};
...
std::vector<Entity*> e;
Barbarian *b = new Barbarian();
e.push_back(b);

答案 2 :(得分:2)

最简单的方法可能是反过来:

struct Entity {
    virtual ~Entity = default;
};
struct Enemy: Entity {};
struct Character: Entity {};

然后将指向任何生物的指针投射到Entity *不会有问题。