c++类中的ID数据成员
ID data member in c++ class
老师要求我们创建自动生成的ID数据成员,一旦建立就不能修改。什么是最合适的类型?如果答案是
当它是const时,我如何自动生成它?
由于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的实例。
创建const ID为int,在构造函数初始化列表中初始化,如
SomeClass(): id(++staticIncrementingInt){
///other stuf here
}
实际上可以在构造初始化列表中调用函数(在本例中为rand)。现在就看你怎么播种了
如果您的老师允许boost库,那么尝试boost . uuid。这里有一个例子。
相关文章:
- 用于访问容器<T>数据成员的正确 API
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 数据成员SFINAE的C++17测试:gcc vs clang
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 如何在c++中定义以struct为数据成员的类中的构造函数
- 静态数据成员模板专用化的实例化点在哪里
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 使用指针访问数组中的对象数据成员
- 友元函数无法访问私有数据成员 (c++)
- 我可以在 C++ 中将数据成员/变量从其定义之外添加到结构中吗?
- 为什么将一个结构的引用设置为等于另一个结构只会更改一个数据成员?
- 将私有数据成员添加到野牛生成的类中
- 输入数据成员未按要求工作
- 二维矢量数据成员
- 在类 A 中创建类型为 B 类的向量 - 访问数据 [C++] [成员在两个类中都是私有的]
- 调用在 HXX 文件中声明的静态数据成员
- 使用宏访问指向数据成员的指针会导致"error: expected unqualified-id before ‘*’ token"
- 在C++03中,在未赋值的上下文中使用表示非静态数据成员的id表达式有效吗
- 在非限定id后的静态数据成员定义中使用的名称
- c++类中的ID数据成员