如何在变量中存储不同的类?

Posted

技术标签:

【中文标题】如何在变量中存储不同的类?【英文标题】:How to store different classes in a variable? 【发布时间】:2020-06-08 19:15:54 【问题描述】:
class Resources

protected:
    int size;
    char repchar;   //Representing Char
public:
    Resources(int size=0,char repchar=' ');
    char getchar();
    int getsize();
        //copy const
        //destructor ;


class Bone:public Resources
private:
    int BoneScore;
public:
    Bone(int size,char repchar,int BoneScore);
;


class Trap:public Resources
/*  private:
          bool active=false;*/
    public:
        Trap();
     //   bool activehigh();
        ;
class Food:public Resources
    private:
        int energy;
    public:
        Food(int size,char repchar,int energy);
;


class Water:public Resources
    private:
        int energy;
    public:
        Water();
;

大家好,基本上我是C++初学者。我正在尝试创建一个基于地图的游戏。我将资源随机放置到地图上,然后他们会轮流收集。最后,程序会计算积分来自骨头,决定获胜者。因此,我想存储玩家获取的资源。我的意思是我想将不同的类存储在一个变量中。谢谢你提前帮助。我有 4 个不同的资源骨头,陷阱,水,食物。

【问题讨论】:

看看std::variant 我正在检查。谢谢 如果我理解你的要求正确,那么如果你声明一个 Resources* 类型的变量,那么你应该能够将它分配给从它派生的任何类。资源* res = water;休息=食物;等等…… 是的,现在我意识到了。我可以全部使用资源 *。我不知道这个功能:) 【参考方案1】:

这称为多态性:

class base ;
class child1 : public base;
class child2 : public base;


base* b1 = new child1();
base* b2 = new child2();

将我的 base 课程视为您的 Resource 课程。你可以这样做:

typedef std::list<Resource*> Resources;


Resources resources;

// Map setup
resources.push_back(new Bone());
resources.push_back(new Trap());
resources.push_back(new Water());

// Interact with each one:
for(auto& resource : resources)
    resource->getsize(); // Call a method from Resource::

// Interact with traps:
for(auto& resource : resources)
    if (resource->getchar() == 't') // If the resource is a trap
        dynamic_cast<Trap*>(resource)->trigger(); // Trap-specific method  

// clean-up
for(auto it = resources.begin(); it != resources.end(); )

    delete *it;
    it = resources.erase(it);


【讨论】:

以上是关于如何在变量中存储不同的类?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 onItemClickListener 在不同的类( ConsumerDescAndEdit.java )中使用某个类的变量?

如何保存变量并从两个不同的类中使用它Objective C

如何获取存储在数组中的类中的值?

如何从 Objective-C 代码中删除一次性使用的类变量?

从不同的类调用主变量

如何使用一个类来存储在不同函数中更新的变量,然后在不同的函数中调用这些更新的变量?