Во-первых, вам нужно (или, по крайней мере, захотеть) сделать функции, которые составляют ваш интерфейс общедоступными:
class Enemy {
public:
Enemy();
virtual ~Enemy();
virtual void doStuff() = 0;
};
Тогда вы будете наследовать его (C ++ не имеет ")интерфейсы "и" классы "как отдельные понятия).
class Emeny_type1 : public Enemy {
// ...
};
Наконец, поскольку это полиморфные типы, вам нужно будет создать коллекцию указателей на врагов, а не реальных объектов врага:
void EnemyManager::addEnemy(Enemy const *e) {
enemies.push_back(e);
}
Это поднимает проблемы времени жизни и владения объектом (которые в основном не являются проблемами в Java).Когда вы добавляете предмет в коллекцию, вам нужно убедиться, что он не будет уничтожен до тех пор, пока вы собираетесь его использовать, а уничтожен, как только закончите с ним (например, когда враг побежден,Вы могли бы хотеть удалить это).Вам нужно решить, собирается ли EnemyManager удалять врагов, которые больше не нужны, или какой-либо другой код.Если EnemyManager собирается удалить их, вам может потребоваться (или вы хотите) добавить функцию clone
в интерфейс Enemy, чтобы она получала копию объекта, добавляемого в коллекцию.
Редактировать:Исходя из вашего комментария, вы не совсем уверены, как использовать «интерфейс» указателя, который вы сохранили в своей коллекции.К счастью, это довольно просто, примерно так:
for (int i=0; i<enemies.size(); i++)
enemies[i]->doStuff();