2011-11-14 7 views
2

私の宿題にご注意ください。すべての宿題と同様に、実際のコーディングへのストレートな回答に対する有益な提案が高く評価されています。しかし、私の概念的な質問にまっすぐ答えてください。二重リンクリストの変なコピーコンストラクタ

こんにちは、

私の教授は私達に宿題のための二重リンクリストを割り当て、そして私は、私は絶対にそれを必要とし、ここで私はまで助けを求める避けました。

彼は私たちにクラスを作らなければならないヘッダーファイルを提供しており、ヘッダーファイルに完全に従わなければなりません。彼がコピーコンストラクタをやっているのは、彼が私たちにコピーコンストラクタコールを持っているヘルパー関数を書くようにすることです。

私は、通常の場合には、これを簡単に行うことができますが、彼は私たちにヘルパー機能のための非常に奇妙な署名を与えているこの時間:

// copys chain at oldHead to newHead. 
static void copy(Elem *&newHead, const Elem *oldHead) 

これはElemsと呼ばれる構造体の連鎖をコピーすることです

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

私は* &事業全体のElemは私が覚えているから、&及び*は互いに相殺していない、ので、何にとして、主に混乱していると思いますか?

ありがとうございます、ありとあらゆるヘルプが本当に感謝しています!うまくいけば、これは将来的に私の立場にある他の人たちを助けてくれるでしょう:)

+1

C++では、ポインタ*への参照です。 –

+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

説明してくれてありがとうございます。それはインターネットや本で簡単に見つけることができないほどよく知られているものの1つです。 – Joshua

+0

あなたが答えを気に入ったら、それを上書きすることを検討してください –

関連する問題