如何在C ++中动态创建(游戏角色)类的多个对象

时间:2019-05-24 14:12:59

标签: c++ oop object

我必须修改程序并创建一个新的(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 个答案:

答案 0 :(得分:1)

我认为polymorphism是用例所需要的,它将解决您的问题。

让我们假设您拥有动物的基类:

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类不必继承自RabbitHedgeHog,它只需要知道它们是类成员,甚至更好地存储{ {1}}作为竞争对手列表。

我希望它能帮助您改善设计并解决问题。