2016-11-26 91 views
1

我有一個基本的問題。 是否可以自動編號對象? 因此,舉例來說,如果我有一個類「項目」,並在主我自動創建多個對象編號

item item1(weight, length); 
item item2(weight, length); 

,並在該項目類的構造函數中,我們指定的重量和長度,以相應的變量。

class item { 

public: 
item(int w, int l){ 
weight = w ; 
length = l ; 
itemnumber = ??? ; 

private: 
int weight; 
int length; 
int itemnumber; 
}; 

但最重要的是,我還想要一個變量itemnumber。當我第一次創建一個對象時(item1的值爲1),第二個創建的對象(item2)等等,這個itemnumber應該是1。但我不想將它作爲參數傳遞。所以基本上我應該把什麼,而不是'???'在我的代碼?

這可能嗎?

回答

3

在類中創建一個靜態字段,並在構造函數中增加它。

是這樣的:

class A { 
public: 
    A() : itemnumber(nextNum) { ++nextNum; } 
private: 
    int itemnumber; 
    static int nextNum; 
} 

// in CPP file initialize it 
int A::nextNum = 1; 

另外,不要忘記遞增複製和移動構造\運營商靜態字段。

+0

使用'的std ::原子'如果你需要線程安全 – Hcorg

+1

不要忘記增加它在複製/移動的構造呢! – Rakete1111

+0

@ Rakete1111好評,添加它 – Starl1ght

0

用一個靜態變量像

class rect{ 
public: 
static int num; 
rect(){num++;} 
}; 

int rect::num =0; 
int main(){ 
rect a(); 
cout << rect::num; 
}