如何在变量中存储不同的类?
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 )中使用某个类的变量?