C 如何使用数组的元素调用类

C++ how to call a class by using an element of an array

本文关键字:元素 调用 数组 何使用      更新时间:2023-10-16

我正在创建一个神奇宝贝战斗模拟器,我想知道我是否可以使用数组的元素调用类。

#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();