文档可以包含许多容器,每个容器可能有也可能没有子容器。每个容器都有名称和容器ID。
在C ++中,我将其建模如下
class Container
{
string ContainerName;
int ContainerID;
int NumberofSubContainers; //number of sub-containers this contain contains
Container* subcontainerlist;
};
class Document
{
string DocumentName;
int NumofContainers; //number of containers document contains
Container* containerlist;
};
这种方法是正确的还是有更好的选择?
答案 0 :(得分:1)
最好使用STL提供的容器而不是描述您自己的容器(除非您已证明它不合适)。如果(子)容器是按顺序排序的,但没有按其ID排序,那么vector
或deque
可能是不错的选择。所有STL容器都有一个size()
方法,用于报告容器所持有的元素数量。
您也未在模型中公开您的任何成员。您需要将它们公开,或者提供公共访问者,或者定义朋友。作为一个模型,您可能应该定义公共接口,以便您可以在以后保持模型完整的情况下随意修改您的实现。
在您的模型中,除了ID之外,Document
看起来与Container
完全相同,因此可以将其排除在外。
class Container;
typedef std::vector<Container> Containers;
class ContainerOwner
{
protected:
std::string m_name;
Containers m_list;
};
class Document : public ContainerOwner
{
public:
std::string & DocumentName () { return m_name; }
const std::string & DocumentName () const { return m_name; }
Containers & ContainerList () { return m_list; }
const Containers & ContainerList () const { return m_list; }
};
class Container : public ContainerOwner
{
int m_id;
public:
std::string & ContainerName () { return m_name; }
const std::string & ContainerName () const { return m_name; }
int & ContainerId () { return m_id; }
int ContainerId () const { return m_id; }
Containers & SubContainerList () { return m_list; }
const Containers & SubContainerList () const { return m_list; }
};