Контейнеры и производные классы

Я нахожусь в процессе создания очень простой игры, в которой объекты (элементы A или B) летают по экрану, сталкиваются и т. Д.

Единственная разница между A и B — это цвет объекта (A = черный, B = белый).

Можно ли иметь контейнер-элементный элемент (или 20 элементов) для хранения 10 А и 10 В. Я осмотрелся вокруг, и я могу сделать это, если у меня есть Вектор типа A или Типа B, но НЕ смесь.

Любая помощь приветствуется! Спасибо — и счастливой запоздалой пасхи

KJ

редактировать:
У A и B есть ряд различных характеристик, например, разные скорости, с которыми они могут двигаться, а также разные способности. E, g A может стрелять лазером, а B — нет. Вот почему я использую разные классы.

1

Решение

Контейнеры C ++ являются однородными, то есть вы не можете хранить в них различные типизированные объекты. Однако вы можете хранить указатели на базовый тип и использовать два производных A а также B классы.

Однако, в вашем случае, если разница только в цвете, я не вижу причин иметь разные классы. Просто имейте свойство color в классе.

Если вам нужны разные классы, вы можете использовать базовый класс, как показано ниже:

class Base
{
public:
// base properties both classes share
// virtual methods etc.
};

class A : public Base
{
public:
// class A specific methods/properties
};

class B : public Base
{
public:
// class B specific methods/properties
};

Теперь вы можете иметь вектор указателей базовых объектов, которые могут быть любого типа A или же B,

std::vector<Base*> objects;

A *a = new A();
B *b = new B();
objects.push_back(a);
objects.push_back(b);
4

Другие решения

Если вам действительно нужно хранить разные объекты в контейнерах, то возможно:

`boost::any`

правильный ответ?

0

По вопросам рекламы [email protected]