C++ c+中的ID数据成员+;班
我的老师要求我们创建自动生成的ID数据成员,一旦建立就不能修改。 最合适的类型是什么? 如果答案是 静态常量int ID强>C++ c+中的ID数据成员+;班,c++,data-structures,types,datamember,C++,Data Structures,Types,Datamember,我的老师要求我们创建自动生成的ID数据成员,一旦建立就不能修改。 最合适的类型是什么? 如果答案是 静态常量int ID 当它是常量时,如何自动生成它?创建一个常量ID为int,在构造函数初始化列表中初始化它,如 SomeClass(): id(++staticIncrementingInt){ ///other stuf here } 希望这能有所帮助。由于ID必须是唯一的,因此应确保两个实例永远不会获得相同的ID。此外,类外的任何人都不应干扰UID的生成 首先,在类中定义一个静态
当它是常量时,如何自动生成它?创建一个常量ID为int,在构造函数初始化列表中初始化它,如
SomeClass(): id(++staticIncrementingInt){
///other stuf here
}
希望这能有所帮助。由于ID必须是唯一的,因此应确保两个实例永远不会获得相同的ID。此外,类外的任何人都不应干扰UID的生成 首先,在类中定义一个静态字段:
class Data
{
private:
static int newUID;
(...)
};
// The following shall be put in a .cpp file
int Data::newUID = 0;
然后,在创建每个实例后,它应该采用一个新的ID值并递增newUID计数器:
class Data
{
(...)
const int uid;
public:
Data()
: uid(newUID++)
{
}
int GetUid()
{
return uid;
}
};
除了类之外,没有人可以访问内部newUID,ID会自动为每个实例生成,并且您(几乎1)可以确定,没有两个实例具有相同的ID号
1除非生成的实例略多于40亿个以下是一个示例:
class SomeClass {
static int currID;
public:
const int ID;
SomeClass() :
ID(currID++) { // Initialization list used to initialize ID
}
};
您必须将其放在.cpp文件中的某个位置:
int SomeClass::currId = 0;
这是用来做的把戏。我们必须这样做,因为它仅在初始化列表中,您可以在实例中分配给const
成员
核心概念是,您必须具有“全局设置”,以跟踪将分配给将来创建的实例的ID。本例中为
currID
。对于在类中创建的每个实例,将currID
的值指定为该实例的ID,然后将其递增(currID
)。通过这种方式,您可以获得具有唯一ID的实例。您实际上可以调用构造初始化列表中的函数(在本例中为rand)。
现在取决于您如何播种。如果您的老师允许boost libs,请尝试。一个例子是。它是兼容的。提示:您将需要一个非常量static和一个常量members。我对这段高效的代码感到满意,它工作得非常完美。非常感谢你。柯立德不是私人会员吗?最后一个语句将如何工作?我有点糊涂了@AlphaMiner在这方面类似于[在.cpp文件中]定义私有(或任何)成员函数的方式。例如,
intMyClass::APrivateFunc(){…}
。为了完全清楚,您将intsomeclass::currId=0代码>在任何函数之外,同样与定义成员函数的方式相同。