2014-04-25 2 views
3

단일/다중 상속을 사용할 때/앞으로 선언을 할 때 이해가 안되다 & 다음 예제에서 더 잘 이해하고 싶습니다. 누군가가 올바른 방향으로 나를 가리킬 수 있거나 그들 사이의 차이점을 설명 할 수 있다면, 그것은 크게 감사 할 것입니다.클래스/구조체 디자인; 상속 vs 전달 선언

다음은 내가 다루는 데이터 구조의 샘플입니다.

부모가 1 명, 하위가 1 명입니다. & 많은 개가 있습니다. 어린이 유형입니다. 즉, 부모 당 SubParent 당 많은 Children이 있습니다. 어떤 어린이는 다른 Children 객체에 액세스해야합니다. 아이들은 ParseSelf/Display/Save/Edit 같은 비슷한 기능을 사용할 것입니다. 자녀가 변경 (즉, 편집/저장) 될 경우 SubParent의 데이터도 업데이트해야합니다 (부모 & 가능).

나는 이런 식으로 구현하는 가장 좋은 방법이 무엇인지 알고 싶습니까? 아래 두 가지 대안을 생각해 냈습니다. 더 많은 설명/정보가 필요하면 알려주십시오.

class SubParent; 
class Children; 

class Parent 
{ 
    ... 
    int iParent; 
    SubParent *pSubParent; 
}; 

class SubParent 
{ 
    ... 
    int iSubParent; 
    std::list<Children> childrenList; 
}; 

class Children 
{ 
    ... 
    int iChild; 
    int ChildType; 
    char *pData; 
}; 

대;

class Parent 
{ 
    ... 
    int iParent; 
}; 

class SubParent : public Parent 
{ 
    ... 
    int iSubParent; 
}; 

class Children : public SubParent 
{ 
    ... 
    int iChild; 
    int ChildType; 
    char *pData; 
}; 

감사합니다.

편집 : 학부모의 주요 직업; SubParent 위치, SubParent 크기, 자기를 포함한 모든 데이터의 전체 크기 등 파일에 대한 정보를 유지 관리합니다. SubParent의 주요 작업; 어린이의 크기 즉 & 어린이에 대한 정보가 들어 있습니다. 부모/하위 부모 모두이 항목을 최신으로 유지하는 것 외에는 그다지 많은 것을하지 않습니다.

+0

당신에 대해 얘기하고 상속 대 ** 조성물. ** 당신은이 클래스가 무엇을해야하는지에 대한 우리에게 충분한 정보를 제공하지 않은,하지만 첫 번째 방법은 아마 더 좋다. – Beta

+0

@ 베타 내 질문을 편집하여 추가 정보를 추가하겠습니다. – ReturnVoid

+0

무엇을 하려는지 확실하지 않습니다. 클래스 나 인터페이스를 작성하기 전에 항상 ** 샘플 사용 코드를 먼저 작성하십시오. – yngccc

답변

1

나는 다음과 같은 변화와 함께, 첫 번째 방법으로가는 것이 좋습니다 :

  1. Parent를 가리키는 SubParent에 멤버를 추가합니다. 이렇게하면 두 가지 방법으로 대상을 탐색 할 수 있습니다. 당신이 Children의 다른 유형을 가질려고하는 경우에

    class SubParent 
    { 
        ... 
        int iSubParent; 
        Parent* parent; 
        std::list<Children> childrenList; 
    }; 
    
  2. 대신 Chilren 목록의 SubParentChildren*의 목록을 유지해야합니다. Children에 하위 클래스가없는 경우 Children 목록을 사용하면 충분합니다.

  3. SubParent에 대한 포인터를 Children에 추가하십시오. 다시 말하지만, 두 가지 방법으로 물체를 탐색 할 수 있습니다. Children이 주어지면 해당 포인터를 통해 형제에 액세스 할 수 있습니다.

    class Children 
    { 
        ... 
        int iChild; 
        int ChildType; 
        SubParent* subParent; 
        char *pData; 
    }; 
    
+0

클래스가 역순 인 경우에도이 방법 (즉 포인터 사용)이 여전히 필요합니까? 전달 선언 사용? – ReturnVoid

+0

@ReturnVoid 나는 그 질문을 따르지 않았다. –

+0

@R Sahu는 마음에 두지 않고 몇 번이나 게시물을 다시 읽은 후에 알아 냈습니다. – ReturnVoid