2013-12-09 60 views
1

我正在製作一個C++應用程序來存儲有關產品的數據,每個產品都有一個唯一的整數ID,有沒有辦法做到這一點?爲每個節點定義一個唯一的整數

我已經爲產品這類節點,但我不知道如何使ID唯一:

class Node{ 
public: 
    int ID; 
    int cost; 
    int quantity; 
    string Name; 

Node(){ID=0; cost=0;quantity=0; Name="";} 

}; 
+2

不確定問題在問什麼。你是否在尋求生成獨特ID的方法?如果是這樣,這是一個單一的機器應用程序,還是你需要生成多個機器上唯一的整數?這些ID是否需要是整數? ID需要支持哪些其他屬性?你問是否有辦法告訴C++(通過類型系統)該ID需要對每個對象唯一嗎? – Rajiv

回答

1

使用一個靜態變量:

Node(){ 
static int id = 0; 
ID=id; 
id++; 
cost=0; 
quantity=0; 
Name="";} 

而且,我會用而不是int

另一種想法: 爲了使代碼具有持久性和線程安全性,每次創建節點時都會在文件上寫入最後一個ID。當程序啓動時,該文件將在另一個singleton類的構造函數中首先被讀取。最後,這個類將保護用互斥鎖生成ID的方法。

1

有幾種方法可以做到這一點。一種方法就是在您的類所在的頭文件中有一個全局變量,用於定義ID,並在分配每個ID之後遞增。但是,許多人儘可能少地使用全局變量 - 當你不期待它們時,它們很容易被修改。

更好的方法是創建一個不同的類(我們稱之爲NodeManager),它有一個跟蹤當前ID的成員變量,每次請求一個新的ID時遞增成員變量,並且必須傳遞進入構造函數Node

稍微更簡潔一些的方法也可以避免全局變量,那就是使用靜態變量。靜態變量在類的所有實例中都是相同的,因此您可以使用它來跟蹤當前的ID。

相關問題