我的老师要求我们创建自动生成的ID数据成员,一旦建立就不能修改。最合适的类型是什么? 如果答案是 static const int ID;
那么在它是常量的情况下,如何自动生成它呢?
我的老师要求我们创建自动生成的ID数据成员,一旦建立就不能修改。最合适的类型是什么? 如果答案是 static const int ID;
那么在它是常量的情况下,如何自动生成它呢?
由于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 会自动生成,你几乎可以确定没有两个实例会有相同的 ID 号码。
class SomeClass {
static int currID;
public:
const int ID;
SomeClass() :
ID(currID++) { // Initialization list used to initialize ID
}
};
并且你必须把这个放在你的 .cpp 文件中的某个地方:
int SomeClass::currId = 0;
const
成员赋值。currID
。对于你类中创建的每个实例,你将currID
的值赋为该实例的ID,然后增加它(currID
)。通过这种方式,你可以得到具有唯一ID的实例。int MyClass::APrivateFunc() { ... }
。为了完全清楚,您需要将 int SomeClass::currId = 0;
放在任何函数之外,同样的方式就像您定义成员函数一样。 - Mark Garcia创建一个常量ID作为int类型,在构造函数初始化列表中进行初始化,如下:
SomeClass(): id(++staticIncrementingInt){
///other stuf here
}