Инициирование производного класса с конкретными значениями переменных - PullRequest
0 голосов
/ 16 марта 2011

Для приведенного ниже фрагмента кода, как я могу инициализировать экземпляры класса Enemy с переменными (такими как x, y, type)?У меня он работает правильно, он запускает экземпляры независимо от того, сколько из них я вставляю ... Мне просто нужно знать лучший способ создания врага с определенными переменными, которые будут отличаться для каждого из моих экземпляров ... особенно когда некоторыеиз этих переменных находятся в базовом классе, а другие нет.

class BaseObject
{
public:
    virtual void Render() = 0;
    int x;
    int y;
};

class Enemy : public BaseObject
{
public:

    Enemy() { }
    virtual void Render()
    {
        cout << "Render! Enemy" << endl;
    }

typedef std::set<BaseObject *> GAMEOBJECTS;
GAMEOBJECTS g_gameObjects;

int main()
{
    g_gameObjects.insert(new Enemy());

    g_lootObjects.insert(new Loot());

    for(GAMEOBJECTS::iterator it = g_gameObjects.begin();
    it != g_gameObjects.end();
    it++)
    {
        (*it)->Render();
    }

    for(GAMEOBJECTS::iterator it = g_lootObjects.begin();
        it != g_lootObjects.end();
        it++)
    {
        (*it)->Render();
    }

    return 0;
}

1 Ответ

4 голосов
/ 16 марта 2011

Включите аргументы в конструкторе врага и конструкторах базы. Затем вы можете использовать их для инициализации переменных-членов.

class BaseObject
{
public:
    BaseObject(int x, int y) : x(x), y(y){ }
    virtual void Render() = 0;
    int x;
    int y;
};

и

class Enemy : public BaseObject
{
public:

    Enemy(int x, int y, int foo) : BaseObject(x,y), foo(foo) { }

    int foo;
...
};
...