2011-11-14 7 views
2

숙제 태그에 유의하십시오. 모든 숙제와 마찬가지로 실제 코딩에 대한 직접적인 대답에 대한 도움이되는 제안은 높이 평가됩니다. 그래도 내 개념적 질문에 답할 수는 있습니다.이중 연결 목록의 이상한 복사 생성자

안녕하세요,

내 교수는 숙제를 우리에게 이중 연결리스트를 할당하고, 나는 절대적으로 그것을 필요로 할 때까지 도움을 요청 피하고되었고, 내가 여기 있나이다.

그는 우리에게 클래스를 만들어야하는 헤더 파일을 제공하고 헤더 파일을 완벽하게 따라야합니다. 그가 그의 복사 생성자을 수행하는 방식은 그가 우리에게 복사 생성자 호출을 가지고있는 도우미 함수를 작성하게한다는 것입니다.

나는 일반적인 경우에, 쉽게 할 수

,하지만 그는 우리에게 도우미 함수에 대한 매우 기괴한 서명을 주신이 시간 :

이 Elems라는 구조체의 체인을 복사하는 것입니다
// copys chain at oldHead to newHead. 
static void copy(Elem *&newHead, const Elem *oldHead) 

:

struct Elem 
{ 
    Information info; 
    Elem *next; 
    Elem *back; 
}; 

가 나는에 관해서는 대부분 혼란 스러워요 어떻게 됐을까 전체 Elem 모델 * & 사업 때문에 내가 기억하지 &을하고 * 서로 상쇄 것과?

감사합니다. 모든 도움은 정말로 감사하겠습니다! 다행히도 앞으로 내 위치에있는 다른 사람들을 도울 것입니다. :)

+1

포인터 *에 대한 참조입니다. –

+1

* 표현식 *에서'&'는 이미 알고있는 것처럼 주소 연산자입니다. * 선언 *에서'&'는 참조 선언을 나타냅니다. 이러한 무관계 한 개념은 불행히도 같은 상징을 공유합니다. 그 점을 이해할 수 있다면, Elem * 및 newHead에 대한 다른 사람들의 의견은 Elem에 대한 참조가 의미가 있어야합니다. –

+0

http://www.parashift.com/c++-faq-lite/references.html –

답변

2
static Elem* copy(const Elem *oldHead) 

잠재적 인 기능이었을 수 있습니다. 당신은 오래된 머리를 가지고 새로운 복제 된 머리를 돌려줍니다.

그가 선택한 것은 참조로 포인터를 전달하는 것입니다.

은 위와 같이 간단하게

static void copy(Elem * newHead, const Elem *oldHead) 
{ 
    newHead = new Elem(); 
} 

일이 있었다면. newHead에 대한 모든 변경 사항은 함수 외부에서 볼 수 없습니다.

아래 내용은 같습니다. x는 값으로 전달됩니다. x에 대한 변경 사항은 덧셈이 반환 된 후에 잊어 버리게됩니다. 귀하의 x는 단지 포인터 일뿐입니다.

void Addten(int x) 
    { 
     x = x + 10; 
    } 

    int x = 10; 
    Addten(x); 
+0

설명해 주셔서 감사합니다. 인터넷이나 서적에서 쉽게 찾을 수 없다는 것을 잘 알고있는 것 중 하나입니다. – Joshua

+0

답변을 원한다면 upvoting을 고려해보십시오. –