C++ 定义具有组合关系的类
一个文档可以有许多容器,每个容器可能有子容器,也可能没有子容器。每个容器都有名称和容器id 在C++中,我将其建模为C++ 定义具有组合关系的类,c++,C++,一个文档可以有许多容器,每个容器可能有子容器,也可能没有子容器。每个容器都有名称和容器id 在C++中,我将其建模为 class Container { string ContainerName; int ContainerID; int NumberofSubContainers; //number of sub-containers this contain contains Container* subcontai
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排序,则
向量
或deque
可能是不错的选择。所有STL容器都有一个size()
您也没有在模型中公开任何成员。您需要将它们公开,或者提供公共访问器,或者定义朋友。作为一个模型,您可能应该定义公共接口,以便以后可以自由地修改实现,同时保持模型不变
在您的模型中,文档
除了ID之外,看起来与容器
完全相似,因此可以将其分解
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; }
};
类容器;
typedef std::向量容器;
类容器所有者
{
受保护的:
std::字符串m_名称;
集装箱清单;
};
类文档:公共容器所有者
{
公众:
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;}
};
类别容器:公共容器所有者
{
国际货币基金组织;
公众:
std::string&ContainerName(){return m_name;}
const std::string&ContainerName()const{return m_name;}
int&ContainerId(){return m_id;}
int ContainerId()常量{return m_id;}
容器和子容器列表(){return m_list;}
const Containers&subcainerlist()const{return m_list;}
};
正如您所知,通常的做法是只使用大写字母命名类,使用camelCase命名变量和实例。只是格式上的差异。如果您注意到SO的语法突出显示,大写变量名的颜色与camelCase变量名的颜色不同。我还看到过使用带有下划线的小写字母的成员和方法;C++标准库喜欢这种样式。就我个人而言,我使用C0deH4cker描述的约定,因为它将用户代码与标准库代码区分开来。我将DocumentBase
重命名为ContainerOwner
或类似的名称。说“容器就是文档库”有点奇怪@MikeDeSimone,谢谢你的建议。已进行编辑。