这可能是一个愚蠢的问题,但无论如何我不得不问。我有2个单独的抽象类:字符和敌人。 野蛮人和死灵法师来自字符, Skeleton , Devil 来自< strong> Enemy。我的问题是我可以创建角色和敌人的派生数组。我可以创建另一个类,让我们这样说实体:
class Entity : public Character, public Enemy {};
然后我会创建一个指向 Enemy 的指针数组。
我能以某种方式这样做:
Entity* p = new Barbarian;
如果这是可能的,我想我需要一个虚拟析构函数。我该如何定义?
编辑:我的一个愚蠢的错误,继承应该是另一种方式,问题是它可以这样做吗?答案 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
同时始终是Character
和Enemy
,但它不能是Barbarian
之类的子类中的一个(或多个)。
所以Entity* p = new Barbarian;
无效。
要实现您的目标,请将Entity
作为Character
和Enemy
的公共基类:
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 *
不会有问题。