0

私は自分のノードとリストクラスを書いていますが、リストクラスに destructor 、 copy constructor 、および代入演算子関数を含める場合を除いて、すべて正常に動作します。 .

linklist::linklist()
    :firstNode(NULL),
    lastNode(NULL),
    nodeCount(0) {}

linklist::~linklist()// destructor
{
    node* current = firstNode;
    while( current != 0 ) {
        node* temp = current->getNextNode();
        delete current;
        current = temp;
    }
    firstNode = 0;
}

linklist::linklist(linklist &L)// copy constructor
{
    firstNode = NULL;
    nodeCount = 0;
    node* temp = L.firstNode;
    for(int i = 0; i < L.getNodeCount(); i++)
    {
        push_back(temp);
        temp = temp->getNextNode();
    }
}

linklist& linklist::operator=(const linklist& L)// overloading assignemnt operator
{
    linklist* LL;
    node* temp = L.firstNode;
    while( temp != NULL ) {
        LL->getLast();
        temp = temp -> getNextNode();
    }
    return *LL;
}
4

2 に答える 2

1

割り当ては、コピー コンストラクターに似ている必要があります。どちらもほとんど同じことをしているからです。

clear違いは、rhs(もう一方)のコピーを開始する前に、リスト(それ自体)に何を割り当てる必要があるかということです。

そして、それ自体への参照を返す必要があります。return *this. そのため、割り当てを連鎖させることができます。

linklist& linklist::operator=(const linklist& L)// overloading assignemnt operator
{
    // Check if self assignment
    if (&L == this)
       return *this;

    // clear myself.
    // copy other.
    return *this;
}
于 2013-04-20T04:23:31.260 に答える
0

あなたには2つの問題があるようです。まず、デストラクタはすべてのノード構造を削除します。コピー コンストラクターを使用してコピーされた新しいリンク リストは、元のリストが破棄されると、正しくないデータになります。次に、コピー コンストラクターを使用してノード構造をコピーした方がよいでしょう。正確な情報がなければなんとも言えませんが、リンクされたリストの ctor は次のようになります。

firstNode = NULL;
nodeCount = 0;
node* temp = L.firstNode;
for(int i = 0; i < L.getNodeCount(); i++)
{
    push_back(new node(*temp));
    temp = temp->getNextNode();
}

このようにして、新しいリンク リストには独自のノードのコピーが作成されます。

于 2013-04-20T04:46:03.437 に答える