2

ドキュメントには多くのコンテナーを含めることができ、各コンテナーにはサブコンテナーがある場合とない場合があります。各コンテナには名前とコンテナ 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;
    };

このアプローチは正しいですか、それともより良い代替手段がありますか?

4

1 に答える 1

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; }
};
于 2012-06-03T03:26:13.980 に答える