![](/img/trans.png)
[英]putting a vector from one class to another using the “has a” relationship or composition
[英]Defining a class with composition relationship
一个文档可以有很多容器,每个容器可能有也可能没有子容器。 每个容器都有名称和容器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;
};
这种方法是正确的还是有更好的选择?
最好使用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; }
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.