2016-01-21 90 views
0

看看這段代碼,它有一個類,當創建一個新對象時,它會給它一個1到100之間的'lvl'的隨機數。在類之後,我使用類實例定義了一些對象。在C++中動態創建對象?

#include <iostream> 
#include <cstdlib> 

using namespace std; 

int main() 
{ 
    class newPokemon { 
     public: 
      int lvl; 
      newPokemon() { 
       lvl = (rand() % 100 + 1); 
      }; 
      void getLevel() { 
       cout << lvl << endl; 
      }; 
    }; 

    newPokemon Gengar; 
    newPokemon Ghastly; 
    newPokemon ayylmao; 
}; 

我想接下來要做的是允許通過詢問他們的名字來定義新的小寵物(對象)。這意味着,但是,我需要動態地創建對象。例如,

程序要求用戶輸入一個名稱,然後
名稱保存爲從類newPokemon
程序可以使用該名稱從類運行的其他功能,如getLevel的對象。

我該如何做到這一點?當然,我知道我不能像硬編碼那樣做,因爲我不能將用戶輸入作爲變量名引用,但是有什麼方法可以通過操作指針或其他方法來完成我所要求的操作嗎?

+0

像['vector'](http://en.cppreference.com/w/cpp/container/vector)的任何種類的可擴展集合。這將意味着每個變量不會擁有自己的名字,而是某種類型的索引。 –

+0

如果我理解你是對的,你可以使用[std :: map](http://en.cppreference.com/w/cpp/container/map)或[std :: unordered_map](http:// en。 cppreference.com/w/cpp/container/unordered_map) – MikeMB

+0

我們知道;向我們展示實際的代碼。你想要的是創建一個函數,該函數返回一個'Pokemon',它接受一個字符串類型的參數,這個名字就是名字。 – Poriferous

回答

1

你可能只是想讓每個口袋妖怪都有一個name屬性(成員變量/字段)。只是做了一堆口袋妖怪已填充名字

3

使用std::map持有你的對象,根據他們的名字。

std::map<std::string, newPokemon> world; 

你必須確保你的對象加入到map被創建後立即。

std::string name; 
... // ask the user for a name 
world[name] = newPokemon(); 
std::cout << "Your level is " << world[name].getLevel() << '\n';