2013-03-06 45 views
1

如何創建將創建100個不同對象的循環。假設我有myPage Page1。 我想創建myPage這些對象的100假設第1頁.... Page100 也是我需要在一個變量保存對象的名稱,例如char name[10]在循環中創建具有不同名稱的100個對象

for(int i = 0; i<100; i++) 
{ 
    // create object with different name of my class 
    // char name = name of object//something like that 
} 

這可能嗎?怎麼樣?

+3

是的,這是可能的。看看'std :: stringstream'。對不起,誤解了你的問題,我以爲你想在你的變量裏面加一個名字。使用數組! – 2013-03-06 12:03:19

+0

http://www.codeproject.com/Articles/6973/A-simple-string-generator-in-C – Gilad 2013-03-06 12:03:38

回答

6

是否有可能?

編號 C++中變量的名稱是在編譯時分配的。

只需使用std::vector<myPage>(或std::array<myPage, N>如果大小是在編譯時確定的並且不應更改)並通過其索引位置訪問對象。

+0

+1,但要保存名稱的某處(然後搜索名稱)我會使用'std :: map' 。 – 2013-03-06 12:05:25

+0

@Adriano:也可以這樣做,但在我看來,他用來檢索變量的只是索引。畢竟,'Page1','Page2',...'Page100'的不同之處僅僅是後綴(索引號) – 2013-03-06 12:06:22

+0

你是對的,直到我看到你的答案我還沒有真正清楚他想要達到什麼樣的結果 – 2013-03-06 12:07:31

0

不,這是不可能的。 當您創建對象時,您將創建一個標識符(源代碼中對象的名稱),並且在運行時不能更改此對象。您可以創建一個擁有name成員的班級,並在施工時分配此班級。

2

說「C++中變量的名稱是在編譯時分配的」,Andy Prowl說得對, 因此您不能在執行過程中更改變量的名稱。

但是,如果你想做一些不可能的事情,還有其他方法可以解決你的問題,而不是獲得100個相同類型的var,你可以實例化一個容器充滿你所有的myPage實例,這裏是一個醜陋的爲例:

std::map<std::string, myPage*> pages; 
for (int i = 0; i < 100; ++i) 
{ 
    std::string name = "page"; 
    page += i; 
    pages.insert (std::make_pair (name, new myPage())); 
} 

和訪問:

myPage* page = pages["page18"]; 
+1

這將在99%的情況下泄漏內存。如果您在將對象放入地圖時構建對象,而無需對它們進行處理,那意味着您希望地圖擁有對象的所有權。首先使用智能指針,或者只使用'emplace_back'實際的對象而不是指針。 – us2012 2013-03-06 12:23:57

+0

我不想使用智能指針或其他東西來顯示此代碼的「主要」部分:名稱增量,這就是爲什麼它是一個'醜陋的例子'。 但我並沒有真正明白你的意思是通過mem泄漏。這是一個只有地圖在實例上有指針的問題嗎?因爲std :: map desctructor調用其所有組件的解構器。所以當你不再需要myPage時,你可以刪除所有myPage實例。我錯了嗎 ? – Marcassin 2013-03-06 12:55:11

+0

是的,你錯了。當一個map包含對象時,它會調用這些對象的析構函數。當一張地圖包含原始指針時,只有指針所佔用的內存將被釋放,指向的對象將繼續存在。沒有什麼是'delete'd並且沒有調用析構函數。 – us2012 2013-03-06 13:12:51

相關問題