Как динамически создать несколько объектов класса (игрового персонажа) в c ++ - PullRequest
0 голосов
/ 24 мая 2019

Я должен изменить свою программу и создать новый класс (Gamefigures), от которого наследуются мои текущие классы (Rabbit и Hedg). Код представляет собой небольшую игру, в которой два животных мчатся, пока они не достигают цели, но во втором задании я должен убедиться, что возможно, что несколько итераций этих животных могут мчаться. (5 против 5 или X против X, например). Мне разрешено перемещать некоторые переменные или методы в класс Gamefigures. Оба животных используют разные правила для ходьбы. Как создать новый класс, который динамически создает несколько объектов одного и того же класса, от которого наследуются мои текущие классы?

Я пытался использовать новое выражение для создания нового объекта, но я не знаю, правильно ли это делать.

Я пытался:

Hedg* nHedg = new Hedg[numFigures];

Вот мой код:

class Hedg: public Gamefigures
{
private:
    int salat = 1;
protected:
    int position1 = 0;
public:
    bool turn(int fields)
    {
        int counter = 10;
        if (fields < 11)//Less than 10 fields
        {
            while ((counter > 0))
            {
                if (counter < fields)//max 10 fields
                {
                    fields = counter;
                }
                position1 += fields;//walk
                counter -= fields;
                if (counter <= 0)
                {
                    salat = 0;
                }
            }
            getSalat();
            return true;
        }
        else
            return false;
    }
    Hedg()
    {
    }
    int getPosition1()
    {
        return position1;
    }
    int getSalat()
    {
        return salat = 1;
    }
    int getStock1()
    {
        return salat;
    }
    ~Hedg()
    {
    }
};

class Game :public Hedg, public Rabbit
{
private:
    int goal = 0;
    int numFields = 0;
protected:
    Rabbit theRabbit;
    Hedg theHedg;
public:
    Game();
    Game(int numFields);
    int getGoal();
    int dice();
    void doyourturn();
    bool getStand();
    ~Game();
};

Вот сообщение об ошибке:

Error code C4430 missing typespecifier

1 Ответ

1 голос
/ 24 мая 2019

Я думаю, что полиморфизм - это то, что вам нужно для вашего случая использования и решит ваши проблемы.

Предположим, у вас есть базовый класс для ваших животных:

class Animal
{
    // ...
    // Create all the (pure) virtual methods to be redefined by a derived class
    virtual void walk() = 0; // For example
};

Затем вы определяете двух своих конкретных животных, кролика и ежа:

class Rabbit : public Animal
{
    // ...
    // Redefine here the (pure) virtual methods of Animal for a Rabbit
    void walk() override;
};
class HedgeHog : public Animal
{
    // ...
    // Redefine here the (pure) virtual methods of Animal for a HedgeHog
    void walk override;
};

И вы можете использовать полиморфизм для обработки списка животных:

std::vector<Animal*> race_competitors;
race_competitors.push_back(new Rabbit);
race_competitors.push_back(new HedgeHog);

И этоКстати, когда вы вызовете метод walk() над конкурентом, он автоматически выполнит правильное правило ходьбы соответствующего животного.

Конечно, в конце гонки не забудьте delete содержание вектора, потому что животные были созданы с помощью new («вручную» выделенная память, в куче).


Только для информации, класс Game не имеетчтобы унаследовать от Rabbit и HedgeHog, нужно просто знать их как учеников или, что еще лучше, сохранить std::vector<Animal*> в качестве списка конкурентов.

Надеюсь, это поможет вам улучшитьВаш дизайн и решить ваши проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...