2017-03-01 14 views
-9

リストクラスのコピーコンストラクタを作成するために、実装に他のメソッドを使用しないという要件がありました。リストクラスのコンストラクタをインプリメンテーションでメソッドを使用せずにコピー

class List { 
    private: 
    struct Node { 
      NodeData *data; 
      Node *next; 
      }; 
      Node *head; 
}; 

要件は、このクラスのコピーコンストラクタを書くことであり、我々はNODEDATAクラス

のためのコピーコンストラクタを使用することを除いて実施して任意の他の方法を使用していない次のよう

クラス断片であります

list::list(const list &t){ 
    Node* q; 
    q=new Node; 
    while (p!=NULL){ 
    q->x= p->x;} 
} 

はこれではありません。次のように私はコピーコンストラクタを書かれている

作業中は、必要に応じてコピーコンストラクタを記述する方法を助けてください。

+3

まあ、それは正しい方向へのステップです。 [前よりも良い](https://stackoverflow.com/questions/42523112/copy-constructor-for-a-pointer-data-linked-list)。あなたの*厳密な*要件がcopy-ctorを書くことであるならば、あなたはそれを(正しいか間違って)やったのです。期待どおりに機能しない場合(あなたのコメント「これは動作していません」と表示されていないように見えます)、ここであなたが言っている以上のことを知っています。つまり、あなたはそれがうまくいくと期待していますし、あなたが書いたコードごとに実際に行っていることとはどう違うのでしょうか。 – WhozCraig

+0

なぜ、あなたのパラメータ 'const list&t' +を使わないのですか?浅いコピーの代わりにデータの深いコピーを作ることを検討してください。これは、 'struct Node'がフィールド' x'を持たないので、コンパイルすべきではありません。 –

+0

@FallaCoulibaly私は、あなたが「何を試したか」を示すための「要求を満たす」ために、いくつかのランダムなコードがタイプされているのだろうかと思います。 –

答えて

0

私は、これがむちゃくちゃの演習であるという意見には反対しています。実際に試してみてください。以下は、何を試してみるべきかについてのアイデアを与えるはずです。http://ideone.com/DdC7bN

class List { 
private: 
    struct Node { 
     int data; // simplification 
     Node *next; 

     Node(int d) { 
      data = d; 
      next = NULL; 
     } 
    }; 

protected: 
    Node *head; 
    Node *tail; 

    public: 
    List(int d) : head(new Node(d)), tail(head) {} 

    void append(int d) { 
     Node* n = new Node(d); 
     tail->next = n; 
     tail = n; 
    } 

    List(const List& rhs) { 
     if (head) delete head; 

     head=new Node(rhs.head->data); 

     Node* lhsCurrent = head; 
     Node* rhsCurrent = rhs.head->next; 
     do { 
      lhsCurrent->next = new Node(rhsCurrent->data); 

      rhsCurrent = rhsCurrent->next; 
      lhsCurrent = lhsCurrent->next;     
     } while (rhsCurrent!=NULL); 

     tail = lhsCurrent; 
    } 
}; 

int main() { 
    List first(5); 
    first.append(6); 

    List second(first); 
    return 0; 
} 
関連する問題