定义具有组合关系的类
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; }
};
相关文章:
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 可组合的lambda/std::函数与std::可选
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 混合组合和继承的C++问题
- 我需要将多个函数组合为一个函数
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- 通过组合不同的类型来创建唯一的id
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- C++GTKMM gui循环依赖关系
- 模板元编程:如何将参数包组合成新的参数包
- 如何避免对具有组合关系的Object进行null检查
- 使用"has a"关系或组合将向量从一个类放到另一个类
- 通过组合的其他成员访问'has-a'关系中的成员
- 定义具有组合关系的类
- C++中组合关系的继承
- 我的聚合、关联和组合关系在这个C++程序中不起作用
- 类之间的聚合和组合关系
- 在c++中,当组合对象构造函数有依赖关系时,如何在初始化列表中强制它们的顺序
- 处理组合关系中的变量
- 类之间的关系——继承和组合