2016-11-26 2 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. Этот номер элемента должен быть 1 при первом создании объекта (так что 1 для item1) и 2 второго созданного объекта (item2) и т. Д. Но я не хочу передавать его в качестве параметра. Итак, в основном, что я должен поставить вместо «???» в моем коде?

Возможно ли это?

ответ

3

Создайте статическое поле внутри класса и увеличьте его в конструкторе.

что-то вроде этого:

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

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

Кроме того, не забывайте увеличивать статическое поле в копирования и перемещения конструкторов \ операторов.

+0

использование 'станд :: атомное ', если вам нужна безопасность потоков – 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; 
} 
Смежные вопросы