2012-03-27 7 views
0

나는 먼저 내 상황을 설명하려고 노력할 것이다. 나는 알아낼 수 없습니다 무엇의 내부 구조의 클래스와동적 배열 값을 출력하는 방법은 C++의 컨테이너 배열을 사용합니까?

class A 
{ 
    struct B 
    { 
     int I; 
     B *next; 
    }; 

    B *objOfB; //Array of structures 
    B *lastB; //Pointer to last objOfB element 

public: 
    //Method for adding values to objOfB 
    void addB(int i) 
    { 
     B *temp = new B; 
     temp->I = i; 
     temp->next = NULL; 
     if(ing == NULL) 
     { 
      last = temp; 
      objOfB = temp; 
     } 
     else 
     { 
      last->next = temp; 
      last = temp; 
     } 
    } 
}; 

객체의 배열이 일부 기능에 사용되는 컨테이너의 CALSS의 배열 파일

A * objA = A[100]; 

을 한 손하는 방법은있다 objOfBobjOfB의 처음부터 끝까지 간단한 예제가 있습니다.

for (B *temp = objOfB; temp != NULL; temp = temp->next) { 
    cout << temp->I << endl; 
} 

나는 기능 파일이 루프를 실행하고 싶습니다하지만 난 (그 루프 B *temp = objOfB;의 첫 번째 부분에 사용되는) 모든 objOfB을 반환하지 않을 방법을 생각할 수 없다. 는 여기이 루프를 실행하기 위해 만든 방법은 다음과 같습니다

B listOfBs() { return *objOfB; } 
B toNextB() { return *objOfB->next; } 
bool noLastB(){ return objOfB->next != NULL; } 

을 그리고 그것이 루프에서 사용할 수 있습니다 작동하는 방법 : 나는 3 방법에 적합하지 않은 것을 이해하지만

for (B *temp = listOfBs(); noLastB(); temp = toNextB()) { 
    cout << temp->I << endl; 
} 

이 루프. 따라서 값을 반환하는 메서드가 필요하고 다음 값을 읽어야한다고 알리는 또 다른 메서드가 필요합니다. 달성하려는 작업이 명확하지 않길 바랍니다.

메서드를 사용하여 컨테이너 클래스 동적 배열의 값을 전달하는 방법은 무엇입니까?

답변

0

내가 이해, 당신은에서 클래스 A (즉 단독으로 링크 된 목록의 래퍼를 나타냄)과 중첩이 간단한 struct B :

struct B 
{ 
    int I; 
    B *next; 
}; 

하고 또한 제공하는 클래스 A을 원하는 인터페이스를 사용하면이 목록을 반복하는 간단한 방법을 제공 할 수 있습니다. 처음에는

,이 데이터 멤버는 매우 혼란 :

B *objOfB; //Array of structures 

첫 번째 요소에 대한 포인터로 취급되기 때문에. 좋은 시작이로 이름을 변경하는 것입니다 : 그래서 지금 B의 각 인스턴스가 next 요소를 가리킬 수 있습니다 B *head;하고 head에 대한 포인터를 가지고, 마지막 요소는 NULL 동일 next를 가진 요소, 당신은 B *lastB; 필요하지 않습니다.

그럼 당신은 방법 당신이 훨씬 의미하지 않습니다 제공하기 위해 노력 것을 깨닫게됩니다 이러한 방법을 볼 수 있도록해야합니다 값과 struct B의 정의부터 반환해야 할 이유가 없다

B listOfBs() { return *head; } 
B toNextB() { return *head->next; } 
bool noLastB(){ return head->next != NULL; } 

어쨌든 발신자에게. KISS principle을 위해 A의 공용 데이터 멤버 head을 만들고보다 의미있는 이름으로 A의 이름을 변경하십시오 (예 : MyList). 그런 다음 발신자에게 전화를 겁니다.

MyList list; 
... 
for (B* b = list.head; b != NULL; b = b->next) { 
    ... 
}