2014-04-18 2 views
0

클래스 내부에있는 개인 Linked List를 인쇄하는 가장 쉬운 방법을 찾고 있습니다. (역순으로)클래스 내에있는 링크 된 목록을 재귀 적으로 인쇄하십시오. C++

내 방법은 Head를 매개 변수로 사용하는 클래스의 함수를 호출하는 것이고 반환은 작업을 수행하는 다른 함수입니다.

이전에 Getter 함수를 통해 Head를 가져 와서 함수 호출에 연결해야했기 때문에이 작업을 수행했습니다. 이 모든 것은 수업 외부에 있습니다.

void Arreglo::InfoDealer(ofstream &salida) 
{ 
    return InfoDealer_f(Head, salida); 
} 

void Arreglo::InfoDealer_f(NodePTR Ptr, ofstream &salida) 
{ 
    if (Ptr == NULL) 
     return; 
    InfoDealer_f(Ptr->Next, salida); 
    //output stuff 
} 

이 정보가 맞습니까? 이 작업을 수행하는 더 좋은 방법이 있습니까? 고맙습니다. 나는 CS에서 새롭기 때문에 인내심을 가져주십시오.

답변

1

나는 확실히 당신의 예제를 이해하지 않지만, 그래, 당신은 일반적으로 공공 방법 (인터페이스) 및 개인 도우미 메서드가 있습니다

class my_class 
{ 
    public: 
     void print(ostream& out); 

    private: 
     NodePtr _head; 
     void print_helper(NodePtr node, ostream& out); 

} 

void my_class::print(ostream& out){ print_helper(_head, out); } 
+0

고맙습니다! 나는 또한 당신의 반응에서 또 다른 것을 배운다. 나는 도우미 기능을 공개했다, 그것은 개인적으로 안전해야한다. :) – emanuel1337

+1

실제로, 공용 메소드는 스트림 삽입 기 (stream-inserter) 유형의 무료 프렌드 기능이어야합니다. – Deduplicator

+0

@Deduplicator true이면 스트림 삽입 연산자가 있어야하지만 'return p.print (o);'이고 public 멤버 함수가있을 수 있습니다. – clcto

1

글쎄, 당신은 일반적으로 잘 생각하고 예를 결국 작동해야합니다.
하지만 몇 가지 포인트는 고려해야 할

  • 더 관용적 사용하기위한 스트림 삽입의 다양한 공공 친구 기능을 사용

    inline ostream& operator<<(ostream& o, const myclass& m) { 
        m.print_helper(m._head, o); 
        return o; 
    } 
    // Add in class: 
        friend ostream& operator<<(ostream& o, const myclass& m); 
    
  • 타입 정의 뒤에 포인터를 숨기지 마십시오, 그것은 단지 사물을 가린다. NodePTRNode*이어야합니다.
+0

'NodePTR'은'shared_ptr '일 수도 있습니다.이 경우 단순히 typedef를 지정하는 것이 더 쉽습니다. – clcto

+0

@clcto : 컨테이너에서 과도하게 추상화되고 정당하지 않은 오버 헤드가 발생합니다. – Deduplicator

관련 문제