2013-12-09 2 views
1

제품에 대한 데이터를 저장하는 C++ 응용 프로그램을 만들고 있습니다. 각 제품마다 고유 한 정수 ID가 있습니다. 내가 사용하는 것 또한모든 노드에 고유 한 정수 정의

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

:

나는 제품이 클래스 노드를 만들었습니다,하지만 난 고유 ID를 만드는 방법을 알고하지 않습니다

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

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

}; 
+2

질문에 무엇이 필요한지 잘 모르겠습니다. 고유 한 ID를 생성하는 방법을 묻는 중입니까? 그렇다면 단일 시스템 응용 프로그램입니까, 아니면 여러 시스템에서 고유 한 정수를 생성해야합니까? ID는 정수 여야합니까? ID가 지원해야하는 다른 등록 정보는 무엇입니까? ID 시스템이 각 객체에 대해 고유해야한다는 것을 C++에 알려주는 방법이 있는지 묻는가? – Rajiv

답변

1

를 사용하여 정적 변수를 int 대신 unsigned int

또 다른 아이디어 : 코드를 지속적이고 스레드로부터 보호하기 위해 노드를 만들 때마다 마지막 ID를 파일에 기록했습니다. 다른 singleton 클래스의 생성자에서 프로그램이 시작될 때 파일이 처음 읽을 수 있습니다. 마지막으로이 클래스는 뮤텍스가있는 ID를 생성하는 메서드를 보호합니다.

1

이렇게하는 방법에는 여러 가지가 있습니다. 한 가지 방법은 클래스가 상주하는 헤더 파일에 전역 변수를 두는 것입니다.이 변수는 ID를 정의하는 데 사용되며 각 ID를 할당 한 후에 증가됩니다. 그러나 많은 사람들이 글로벌 변수를 가능한 한 적게 사용하려고합니다. 예상치 못한 경우 전역 변수를 수정하기가 너무 쉽습니다.

더 나은 방법은 현재 ID를 추적하고 새 ID가 요청 될 때마다 멤버 변수를 증가 시키며 전달되어야하는 멤버 변수가있는 다른 클래스 (NodeManager이라고 부름)를 만드는 것일 수 있습니다. Node의 생성자에 추가합니다.

전역 변수를 피하는 약간 더 간결한 방법은 정적 변수를 사용하는 것입니다. 정적 변수는 모든 클래스 인스턴스에서 동일하므로이 값을 사용하여 현재 ID를 추적 할 수 있습니다.

관련 문제