The diagram http://www.freeimagehosting.net/uploads/2fd3f4161c.png
这是我一直在努力的应用的Minimalist-UML图。它应该模拟与不同测量相关的一堆传感器的管理。
请忽略House
课程,图表已过时......
然而,我遇到了麻烦。每个传感器(声音,接触,热量,压力,气体 - 所有这些继承自sensor
)都有一个唯一的ID,从第一个开始为0,以传感器总数为1开始。
为了良好实践,我应该在哪里存储传感器的总数,因此我用于输入/输出文件(保存和加载)和插入新传感器的类可以访问和增加该计数器?< / p>
感谢您的时间!
答案 0 :(得分:5)
无论对象创建什么,传感器都应将标识符分配给传感器。
如果多个对象创建传感器,则应在创建传感器时为其分配指针或引用,并且在创建新的传感器对象时,应该向该提供程序查询新的唯一标识符。
答案 1 :(得分:5)
一种选择是在Sensor类中创建一个静态函数,该函数递增并返回一个静态计数器变量。 Sensor的构造函数可以调用此函数来获取ID。
// header file
class Sensor
{
...
protected:
static int getId() { return id++; }
private:
static int id;
int myId;
};
// .cpp file
int Sensor::id = 0;
Sensor::Sensor(...)
: myId(getId())
...
{}
我在这里忽略了线程和持久性问题。但希望这会给你一个更好的主意。
答案 2 :(得分:1)
您的唯一ID(如数据库表ID)可能会出现一些问题。
您最终可能会发现您的ID需要在会话中持续存在 - 您的窗口ID会用于其他关系。
有一天,您可能会发现它需要在多个服务器/客户端集中保持唯一。
我只是建议您应该立即考虑这些问题。
至于应该生成ID的位置,因为所有“Sensor”类都从一个基类继承,我想我会通过该基类中的线程安全方法生成它 - 我将它存储在那里好。
答案 3 :(得分:0)
有什么问题?你用Vector来存储你的传感器吗?在房子里定义一个传感器对象的矢量。
可以访问和增加该计数器
你不必这样做,Vector会为你做这件事
答案 4 :(得分:-1)
假设您不想使用某种数据库,请查看Singleton pattern。