2012-06-03 2 views
2

문서는 많은 컨테이너를 가질 수 있으며 각 컨테이너에는 하위 컨테이너가있을 수도 있고 없을 수도 있습니다. 각 컨테이너에는 이름과 컨테이너 ID가 있습니다.컴포지션 관계가있는 클래스 정의

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; 
    }; 

이 방법 정확하거나 더 나은 대안이 될 수 있습니다 다음과 같이

C에서

는 ++ 나는 그것을 모델로했다?

+3

는 만 대문자로 이름이되는 클래스의 일반적인 관행이며, 변수와 인스턴스에 대한 낙타 표기법을 사용하여 명명 할 수 있습니다. 서식 지정의 차이뿐입니다. SO의 구문 강조 표시가 나타나면 UpperCase 변수 이름이 낙타 사례 변수 이름과 다른 색으로 표시됩니다. – C0deH4cker

+0

좋은 접근 방법 인 것 같습니다. – james82345

+0

'lowercase_with_underscores'로 작성된 멤버와 메소드도 보았습니다. C++ 표준 라이브러리는이 스타일을 좋아합니다. 개인적으로 C0deH4cker 규약을 사용하면 표준 코드와 별도로 사용자 코드를 설정하기 때문에 설명합니다. –

답변

1

STL에서 제공하는 컨테이너를 사용하는 것이 좋습니다 (부적절한 것으로 입증되지 않은 경우 제외). 하위 컨테이너가 정렬되었지만 ID로 정렬되지 않은 경우 vector 또는 deque 일 수 있습니다. 모든 STL 컨테이너에는 컨테이너에서 보유한 요소 수를보고하는 size() 메서드가 있습니다.

회원님의 모델에 회원을 공개하지 않으 셨습니다. 공개하거나 공개 접근자를 제공하거나 친구를 정의해야합니다. 모델로서 모델을 그대로두고 나중에 구현을 수정할 수 있도록 공용 인터페이스를 정의해야합니다.

모델에서 Document은 ID를 제외하고 정확히 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; } 
}; 
+1

'DocumentBase'의 이름을'ContainerOwner' 또는 비슷한 것으로 바꿀 것입니다. 이상한 말은 "컨테이너 *는 문서 기반"입니다. –

+0

@MikeDeSimone, 제안에 감사드립니다. 편집이 완료되었습니다. – jxh

관련 문제