C 如何使用数组的元素调用类
C++ how to call a class by using an element of an array
我正在创建一个神奇宝贝战斗模拟器,我想知道我是否可以使用数组的元素调用类。
#include <iostream>
#include <time.h>
#include <string>
using std::cout;
using std::endl;
using std::string;
string PokémonArray[] = { "Pikachu","Pidgey" };
class Pokémon {
public:
string basic_attack;
int basic_attack_dmg;
string getBasicAttackName() { return basic_attack; }
Pokémon() { ; }
};
class Pikachu : public Pokémon {
public:
Pikachu(){ basic_attack = "Whatever"; }
};
int main(){
int random_num;
string randEnemy;
srand(TIME(NULL));
random_num = rand() % 2; //Generates a random number between 0 and 1
randEnemy = PokémonArray[random_num]; //Sets randEnemy to be equal to the element 0 or 1 (generated above) of the array
(randEnemy) enemy; //Try to create the object 'enemy' calling a class using an element of the array
}
如何使用具有相同名称的数组的元素来调用类?
直接回答您的问题 - 是的,但是您需要大量If/else语句,并且您必须使用多态性基础。
Pokemon* pokemon = nullptr;
if(randEnemy == "Pikachu")
pokemon = new Pikachu;
else if (randEnemy == "Raichu")
pokemon = new Raichu;
else if...
此模式称为"工厂方法"或"虚拟构造函数"。
您可以(并且应该)将Pokemon
直接存储在数组中,但是它不会像其他答案那样简单,因为Pokemon
实例显然是多态性的。因此,您需要存储的是指向Pokemon
实例的指针。
最好的智能指针(用于自动破坏)。根据使用的不同,可以是:
std::vector<std::unique_ptr<Pokemon> > PokemonArray;
或
std::vector<std::shared_ptr<Pokemon> > PokemonArray;
(取决于指针实例是否可以由多个所有者拥有)
或一个简单的数组,但我通常更喜欢std::vector
。
您可以将口袋妖怪存储在数组中。
Pokemon PokémonArray[152];
,然后一旦需要它们才能直接调用其功能。
randEnemy = PokémonArray[random_num];
randEnemy.basicAttack();
相关文章:
- 如何为 std::vector 分配内存,然后稍后为某些元素调用构造函数?
- C++:带有大括号初始化列表的函数调用表达式 - 标准是否规定在单个元素列表的微不足道的情况下忽略大括号?
- 使用并行参数向量调用元素向量的成员函数
- 调用 erase() 函数是否也会在擦除元素之前更改迭代器值?
- 如何在不迭代的情况下对数组中的每个元素调用方法
- 为什么 delete[] 不等同于 C++ 中为每个元素调用 delete?
- C++为每个元素调用任意函数
- C 如何使用数组的元素调用类
- boost::lockfree-为排队的元素调用析构函数
- 如何使用提升 lambda 对集合中的每个元素调用方法?
- 为集合中的每个元素调用具有多个参数的函数
- 对C++向量的每个元素调用函数
- 为构造的std::vector中的每个元素调用默认构造函数
- c++11:用向量的元素调用变差函数
- 对std::array中的元素调用用户定义的构造函数
- 对一个对象上的每个元组元素调用函数,不进行递归
- 当每个字符串由"new char[]"创建时,如何对"vector<string>"的元素调用"delete"?
- 作为数组元素调用函数
- std::list 的擦除成员函数是否为所有存储的元素调用析构函数?
- 对集合中的每个元素调用print的通用算法