如何建立这样一个类?

huabinsir 2009-02-20 04:54:37
原问题:

在做一个门禁系统。
一些类型的人能进XX类型的门。
另一些类型的人能进XXX类型的门。
人和门的关系 (是将人和门对应,还是将门和人对应).

我想建立人员类和门二个类,应如何合理地建立呢?


有人回答:
A: 你不能举出两个本没有直接关系的类型,
就简单地建立所谓的关系。你应该将关系单独设计为对象(类)。

B: 你需要的只是一个门禁类.将身份验证是其一个功能而已


问题:
如何建立一个门禁类?
...全文
366 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
fan624624 2009-02-24
  • 打赏
  • 举报
回复
学习了。真是好东西啊!
huabinsir 2009-02-24
  • 打赏
  • 举报
回复
五楼代码中,
{
private:
set<CPerson> person_permit_;
}

是什么意思?


二十楼的代码好理解? 不知理解得对不对?

class Person{};

class Door{};

class Open_Method;
{
Open_Method(参数<Person>, 参数<Door>)

}
huabinsir 2009-02-23
  • 打赏
  • 举报
回复
这种情况下, 一般是建三个类. (人,门,关系 )

数据是要存在数据表中. 合理的方法是建几个表呢?
CodeSpy 2009-02-23
  • 打赏
  • 举报
回复
不知道XX类型的人是个什么概念?靠ID来识别,还是靠class type来区分。
laocpp 2009-02-23
  • 打赏
  • 举报
回复
当然是三个了: 人, 门, 关系(门卡)
人是人, 门是门; 人无门照活, 门无人仍开; 要从此门过, 掏出门卡来, 有人无卡莫过来.
CodeSpy 2009-02-23
  • 打赏
  • 举报
回复
5楼的思路可以,但是具体说来我觉得应该让door持有开此door的钥匙,让person持有此钥匙的拷贝;通常door的数量要远少于person的数量,如果像这样的话set<CPerson> person_permit_,效率是个问题~-~
瓶盒 2009-02-23
  • 打赏
  • 举报
回复
对于五楼,我觉得把关系改为群组,对人分类分组,更清晰一些

class CPerson
{
public:
CPerson( int id );
~CPerson();

bool GoThroughDoor( CDoor* pDoor );
private:
int id_;
CGroup* m_Owner;
};

class CDoor
{
public:
CDoor();
CDoor( CGroup* pRelation );
~CDoor();
void ChangeRelation( CGroup* relation );
bool OpenDoor( CPerson& person );

private:
CGroup* relation_;
};

class CGroup
{
public:
CGroup();
~CGroup();
void AddPerson();
void DelPerson();
bool PermitPerson( CPerson& person );
private:
bool FindPerson( CPerson& person );
private:
set<CPerson> person_permit_;
}
huabinsir 2009-02-23
  • 打赏
  • 举报
回复
靠ID或指纹或掌纹来识别.

类是设计好了。

数据表的设计 和 类 有相关性吗? 请高手指导.
lhwiskoala 2009-02-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhh157 的回复:]
...

class CDoor
{
public:
CDoor();
CDoor( CRelation* pRelation );
~CDoor();

void ChangeRelation( CRelation* relation );

bool OpenDoor( CPerson& person );

private:
CRelation* relation_;
};

...
[/Quote]

我觉得关系不应该放在door类里
人是人,门是门,关系是关系
在关系类里管理关系,人过门去check关系。

如果人用ID区分,门也用ID区分
关系类里就建立pair,或者建立链表向量。
huabinsir 2009-02-22
  • 打赏
  • 举报
回复
answer of fallening is vety good!
fallening 2009-02-22
  • 打赏
  • 举报
回复
[Quote=引用楼主 huabinsir 的帖子:]
原问题:

在做一个门禁系统。
一些类型的人能进XX类型的门。
另一些类型的人能进XXX类型的门。
人和门的关系  (是将人和门对应,还是将门和人对应).

我想建立人员类和门二个类,应如何合理地建立呢?


有人回答:
A: 你不能举出两个本没有直接关系的类型,
就简单地建立所谓的关系。你应该将关系单独设计为对象(类)。

B: 你需要的只是一个门禁类.将身份验证是其一个功能而已


问题:
如何建立一个门禁类?
[/Quote]
class Person{};

class Door{};

template<typename T>
class class_a :public T{};

template<typename T>
class class_b :public T{};

template<typename P, typename D>
class Open_Method;

template<>
class Open_Method<class_a<Person>, class_a<Door>>{};

template<>
class Open_Method<class_b<Person>, class_b<Door>>{};

编译期间检查:)


hAn_Xxx 2009-02-22
  • 打赏
  • 举报
回复
mark
jtacm 2009-02-22
  • 打赏
  • 举报
回复
顶5楼!!
maritimesun 2009-02-22
  • 打赏
  • 举报
回复
UP五楼!!
Alix-Lei 2009-02-22
  • 打赏
  • 举报
回复
学习了
huabinsir 2009-02-21
  • 打赏
  • 举报
回复
5楼的是很好, 但按这种方法, 程序还是比较难写的吧?
zqz981 2009-02-21
  • 打赏
  • 举报
回复
up
danxuezx 2009-02-21
  • 打赏
  • 举报
回复
5楼的思想好
Chevin 2009-02-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhh157 的回复:]
首先,我比较倾向于面向实体建模
因为,我觉得现实世界的实体模型有着必然的价值

所以,就这个命题来说,同时创建Person和Door两个类似乎比较合理
那么,门和人的这种对应关系,该如何建模呢?
我觉得,将这种关系依附到人这个实体上,不太合理

因为,我们可以想象到这种情形,拥有门禁卡的人
可能并不需要知道自己是否能够进这个们
他只需要拿着门禁卡试一次就行了

同样,我觉得把这种关系附加到门上也不…
[/Quote]

UP
weinixugeyuan 2009-02-21
  • 打赏
  • 举报
回复
学习了~
加载更多回复(10)

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧