0

インストラクターが私に何をするように求めているのか、私は完全に混乱しています。彼が提供した私たちのプログラムのサンプル出力は、次のように述べています。

だから私は彼が何を求めているのか分かりません。

ここでcopyQueue関数を作成しました:

template <class Type>
void queueType<Type>::copyQueue(/*const*/ queueType<Type>& otherQueue)
//I omitted the const qualifier as I kept getting error messages when it was included
{
    if(otherQueue.queueFront=NULL) {
        initializeQueue();
    } else {
        count = otherQueue.count;
        maxQueueSize= otherQueue.maxQueueSize;
        queueFront = otherQueue.queueFront;
        queueRear = otherQueue.queueRear;
        list= new Type[maxQueueSize];
        assert(list!=NULL);

        for(int i = queueFront; i<queueRear; i++)
            list[i]= otherQueue.list[i];
    }//end else
}//end function

そして、キューの内容を出力する関数:

template <class Type>
void queueType<Type>::debugArray() {
    for(int current =queueFront; current<count; current++) {
        cout<<"[" << current<<"] ,"<< list[current]<<" ";
    }
    cout<<"\n"<<endl;
} //end debugQueue

私は、main.cpp で次のように copyQueue を呼び出す必要があると想定しています。

#include <iostream>
#include "queueAsArray.h"

using namespace std;

int main() {
    queueType<int> q1;
    queueType<int> q2;

    for(int i= 0; i<10; i++)
    q1.addQueue(i);
    q1.debugQueue();

    q1.copyQueue(q1);
    q1.debugQueue();

    return 0;
}

これを行うと、2回目に呼び出しても何も起こりませんdebugQueue。サンプル出力があり、そこから q1 を引数としてcopyQueue関数に送信し、もう一度呼び出しdebugQueueて、キューにまだコンポーネントがキューにあることを示す必要があると想定します。

2回目に印刷されない理由について、少し迷って混乱しています。何かご意見は?これは私の作業のほんの一部です。実装ファイル全体または完全な main.cpp ファイルが必要な場合はお知らせください。または、サンプル出力例が必要な場合は、それも提供できます。

ありがとう

4

2 に答える 2

2

インストラクターがあなたに求めているのは、コピー コンストラクターをテストすることだと思います。メインには次のものが必要です。

int main() {
    queueType<int> q1;
    queueType<int> q2;

    for(int i= 0; i<10; i++)
        q1.addQueue(i);
    q1.debugQueue();

    q2.copyQueue(q1); // q2 here
    q2.debugQueue();  // q2 here

    return 0;
}

次に、2 つの呼び出しは同じ配列を出力するはずです。これは、 queueが正しく queue にコピーされdebugQueueたことを証明します。q1q2

copyQueue関数内のコードにもエラーがあります。

if(otherQueue.queueFront = NULL)

する必要があります

if(otherQueue.queueFront == NULL)

二重等号で。単純な=だけで消去otherQueueされます(これがおそらく、コンパイラが について不平を言った理由constです)。double==は等しいかどうかをテストします。これを修正すれば、constback を追加できます (非 const パラメーターを持つコピー コンストラクターを使用するのは非常に悪い考えです)。

于 2012-10-20T18:35:25.713 に答える
1

コピーコンストラクターは、他の回答が示唆しているように「オブジェクトをコピーする」だけでなく、非常に特殊な構造です。簡単な入門書についてはこの記事を読んでください。さらにいくつかについては、「コピー コンストラクター」をググってください。

また、コピー コンストラクターがある場合、代入演算子と仮想デストラクタが必要になる理由について、このスニペットを読むこともできます。

また、const エラーを診断するためにも、const の正確性に関するこのセクション全体を読む必要があります。

于 2012-10-20T18:58:18.493 に答える